[flang] Add missing check for unresolved name
authorTim Keith <tkeith@nvidia.com>
Wed, 22 Apr 2020 23:19:38 +0000 (16:19 -0700)
committerTim Keith <tkeith@nvidia.com>
Thu, 23 Apr 2020 14:00:38 +0000 (07:00 -0700)
Summary:
The name in an InputItem isn't necessarily resolved if an error occurred,
so it needs to be checked.

Fixes https://bugs.llvm.org/show_bug.cgi?id=45477

Reviewers: klausler, PeteSteinfeld, DavidTruby, jdoerfert, sscalpone

Reviewed By: klausler, sscalpone

Subscribers: llvm-commits

Tags: #llvm, #flang

Differential Revision: https://reviews.llvm.org/D78685

flang/lib/Semantics/check-io.cpp

index a1305ae..250ad49 100644 (file)
@@ -283,15 +283,17 @@ void IoChecker::Enter(const parser::InputItem &spec) {
   flags_.set(Flag::DataList);
   if (const parser::Variable * var{std::get_if<parser::Variable>(&spec.u)}) {
     const parser::Name &name{GetLastName(*var)};
-    if (auto *details{name.symbol->detailsIf<ObjectEntityDetails>()}) {
-      // TODO: Determine if this check is needed at all, and if so, replace
-      // the false subcondition with a check for a whole array.  Otherwise,
-      // the check incorrectly flags array element and section references.
-      if (details->IsAssumedSize() && false) {
-        // This check may be superseded by C928 or C1002.
-        context_.Say(name.source,
-            "'%s' must not be a whole assumed size array"_err_en_US,
-            name.source); // C1231
+    if (name.symbol) {
+      if (auto *details{name.symbol->detailsIf<ObjectEntityDetails>()}) {
+        // TODO: Determine if this check is needed at all, and if so, replace
+        // the false subcondition with a check for a whole array.  Otherwise,
+        // the check incorrectly flags array element and section references.
+        if (details->IsAssumedSize() && false) {
+          // This check may be superseded by C928 or C1002.
+          context_.Say(name.source,
+              "'%s' must not be a whole assumed size array"_err_en_US,
+              name.source); // C1231
+        }
       }
     }
   }