diff --git a/flang/lib/Semantics/check-acc-structure.cpp b/flang/lib/Semantics/check-acc-structure.cpp --- a/flang/lib/Semantics/check-acc-structure.cpp +++ b/flang/lib/Semantics/check-acc-structure.cpp @@ -149,6 +149,9 @@ case llvm::acc::Directive::ACCD_data: // Restriction - line 1249-1250 CheckRequireAtLeastOneOf(); + // Restriction is not formally in the specification but all compilers emit + // an error and it is likely to be omitted from the spec. + CheckNoBranching(block, GetContext().directive, blockDir.source); break; case llvm::acc::Directive::ACCD_host_data: // Restriction - line 1746 diff --git a/flang/test/Semantics/OpenACC/acc-branch.f90 b/flang/test/Semantics/OpenACC/acc-branch.f90 --- a/flang/test/Semantics/OpenACC/acc-branch.f90 +++ b/flang/test/Semantics/OpenACC/acc-branch.f90 @@ -167,4 +167,12 @@ end do !$acc end serial + + !$acc data create(a) + + !ERROR: RETURN statement is not allowed in a DATA construct + if (size(a) == 10) return + + !$acc end data + end program openacc_clause_validity