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