diff --git a/flang/lib/Semantics/resolve-labels.cpp b/flang/lib/Semantics/resolve-labels.cpp --- a/flang/lib/Semantics/resolve-labels.cpp +++ b/flang/lib/Semantics/resolve-labels.cpp @@ -122,7 +122,6 @@ std::is_same_v || std::is_same_v || std::is_same_v || - std::is_same_v || std::is_same_v || std::is_same_v || std::is_same_v || @@ -230,7 +229,7 @@ parser::BlockStmt, parser::ChangeTeamStmt, parser::CriticalStmt, parser::IfThenStmt, parser::NonLabelDoStmt, parser::SelectCaseStmt, parser::SelectRankStmt, parser::SelectTypeStmt, - parser::WhereConstructStmt>; + parser::ForallConstructStmt, parser::WhereConstructStmt>; using LabeledConstructEndStmts = std::tuple 3) goto 200 + goto 100 +200 return +end subroutine test4_forall_construct + +! CHECK-LABEL: func @_QPtest4_forall_construct +! CHECK: cf.br ^bb1 +! CHECK: ^bb1: // 2 preds: ^bb0, ^bb2 +! CHECK: %{{.*}} = fir.do_loop +! CHECK: cf.cond_br %{{.*}}, ^bb2, ^bb3 +! CHECK: ^bb2: // pred: ^bb1 +! CHECK: cf.br ^bb1 +! CHECK: ^bb3: // pred: ^bb1 +! CHECK: cf.br ^bb4 +! CHECK: ^bb4: // pred: ^bb3 +! CHECK: return + +subroutine test4_forall_construct2() + integer :: a(2) = 1 +100 forall (i=1:2) a(i) = a(i) + 1 + if (a(1) > 3) goto 200 + goto 100 +200 return +end subroutine test4_forall_construct2 + +! CHECK-LABEL: func @_QPtest4_forall_construct2 +! CHECK: cf.br ^bb1 +! CHECK: ^bb1: // 2 preds: ^bb0, ^bb2 +! CHECK: %{{.*}} = fir.do_loop +! CHECK: cf.cond_br %{{.*}}, ^bb2, ^bb3 +! CHECK: ^bb2: // pred: ^bb1 +! CHECK: cf.br ^bb1 +! CHECK: ^bb3: // pred: ^bb1 +! CHECK: cf.br ^bb4 +! CHECK: ^bb4: // pred: ^bb3 +! CHECK: return