[flang] Fixes the Label vs. IntLiteralConstant issue flang-compiler/f18#180
authorEric Schweitz <eschweitz@nvidia.com>
Tue, 11 Sep 2018 23:26:19 +0000 (16:26 -0700)
committerEric Schweitz <eschweitz@nvidia.com>
Tue, 11 Sep 2018 23:26:19 +0000 (16:26 -0700)
Original-commit: flang-compiler/f18@40387158dc33ae4623bef89d4509fb682feba82b
Reviewed-on: https://github.com/flang-compiler/f18/pull/181
Tree-same-pre-rewrite: false

flang/lib/parser/grammar.h
flang/lib/semantics/resolve-labels.cc

index 034171f..8940d19 100644 (file)
@@ -2629,8 +2629,8 @@ TYPE_CONTEXT_PARSER("PRINT statement"_en_US,
         "PRINT" >> format, defaulted("," >> nonemptyList(outputItem))))
 
 // R1215 format -> default-char-expr | label | *
-TYPE_PARSER(construct<Format>(defaultCharExpr / !"="_tok) ||
-    construct<Format>(label) || construct<Format>(star))
+TYPE_PARSER(construct<Format>(label) || 
+     construct<Format>(defaultCharExpr / !"="_tok) || construct<Format>(star))
 
 // R1216 input-item -> variable | io-implied-do
 TYPE_PARSER(construct<InputItem>(variable) ||
index 66d1ab6..54ee29e 100644 (file)
@@ -337,19 +337,9 @@ public:
   void Post(const parser::EndLabel &endLabel) { addLabelReference(endLabel.v); }
   void Post(const parser::EorLabel &eorLabel) { addLabelReference(eorLabel.v); }
   void Post(const parser::Format &format) {
-    // BUG: the label is saved as an IntLiteralConstant rather than a Label
-#if 0
     if (const auto *P{std::get_if<parser::Label>(&format.u)}) {
       addLabelReferenceFromFormatStmt(*P);
     }
-#else
-    if (const auto *P{std::get_if<0>(&format.u)}) {
-      addLabelReferenceFromFormatStmt(
-          parser::Label{std::get<0>(std::get<parser::IntLiteralConstant>(
-              std::get<parser::LiteralConstant>((*P->thing).u).u)
-                                        .t)});
-    }
-#endif
   }
   void Post(const parser::CycleStmt &cycleStmt) {
     if (cycleStmt.v.has_value()) {