diff --git a/flang/lib/Lower/PFTBuilder.cpp b/flang/lib/Lower/PFTBuilder.cpp --- a/flang/lib/Lower/PFTBuilder.cpp +++ b/flang/lib/Lower/PFTBuilder.cpp @@ -511,7 +511,7 @@ 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 --- /dev/null +++ b/flang/test/Lower/pre-fir-tree08.f @@ -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: <> -> 5 +! CHECK: 2 ^IfStmt -> 5: 10if(i.eq.1)goto11 +! CHECK: 3 ^GotoStmt! -> 7: goto11 +