[flang] Fix optional assertion in PFTBuilder
authorValentin Clement <clementval@gmail.com>
Wed, 8 Feb 2023 15:54:00 +0000 (16:54 +0100)
committerValentin Clement <clementval@gmail.com>
Wed, 8 Feb 2023 15:54:36 +0000 (16:54 +0100)
D142279 enabled assertion in libstdc++ and one was triggered
in the PFTBuilder because an optional was access even if it was
null.
This patch fix this issue and add a regression test.

Reviewed By: jeanPerier

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

flang/lib/Lower/PFTBuilder.cpp
flang/test/Lower/pre-fir-tree08.f [new file with mode: 0755]

index b9215f5..d7bc7c1 100644 (file)
@@ -511,7 +511,7 @@ private:
       auto branchTargetMatch = [&]() {
         if (const parser::Label targetLabel =
                 ifCandidateStack.back().ifTargetLabel)
-          if (targetLabel == *targetEval.label)
+          if (targetEval.label && targetLabel == *targetEval.label)
             return true; // goto target match
         if (targetEvalIsEndDoStmt && ifCandidateStack.back().isCycleStmt)
           return true; // cycle target match
diff --git a/flang/test/Lower/pre-fir-tree08.f b/flang/test/Lower/pre-fir-tree08.f
new file mode 100755 (executable)
index 0000000..a7ee4eb
--- /dev/null
@@ -0,0 +1,21 @@
+! RUN: %flang_fc1 -fdebug-pre-fir-tree -fopenacc %s | FileCheck %s
+       program rewrite_goto
+       integer b
+       
+       b = dummy(10)
+
+       end
+      function dummy(a)
+      integer, a
+      
+      do 10 i=1,10
+  10  if(i .EQ. 1) GOTO 11
+      i=0
+  11  dummy = a + i
+      return
+      end
+
+! CHECK: <<IfConstruct!>> -> 5
+! CHECK: 2 ^IfStmt -> 5: 10if(i.eq.1)goto11
+! CHECK: 3 ^GotoStmt! -> 7: goto11
+