! RUN: not %flang -fsyntax-only -fopenmp %s 2>&1 | FileCheck %s ! REQUIRES: shell ! OpenMP Version 4.5 ! Check invalid branches into or out of OpenMP structured blocks. subroutine omp_err_end_eor(a, b, x) integer x !$omp parallel !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into !CHECK: invalid branch leaving an OpenMP structured block !CHECK: Outside the enclosing PARALLEL directive open (10, file="myfile.dat", err=100) !CHECK: invalid branch leaving an OpenMP structured block !CHECK: Outside the enclosing PARALLEL directive !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into !CHECK: invalid branch leaving an OpenMP structured block !CHECK: Outside the enclosing PARALLEL directive read (10, 20, end=200, size=x, advance='no', eor=300) a !$omp end parallel goto 99 99 close (10) goto 40 !$omp parallel 100 print *, "error opening" !$omp end parallel 101 return 200 print *, "end of file" 202 return !$omp parallel 300 print *, "end of record" !$omp end parallel 303 return 20 format (1x,F5.1) 30 format (2x,F6.2) !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into 40 open (11, file="myfile2.dat", err=100) goto 50 !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into 50 write (11, 30, err=100) b close (11) end subroutine subroutine omp_alt_return_spec(n, *, *) if (n .eq. 0) return if (n .eq. 1) return 1 return 2 end subroutine program omp_invalid_branch integer :: n = 0, a = 3, b !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into goto (1, 2, 3) a assign 2 to b !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing PARALLEL directive branched into goto b (1, 2) !$omp parallel !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing SINGLE directive branched into !CHECK: invalid branch leaving an OpenMP structured block !CHECK: Outside the enclosing PARALLEL directive 3 if(n) 4, 5, 6 6 print *, 6 2 print *, 2 !$omp single 4 print *, 4 !$omp end single !$omp end parallel 1 print *, 1 5 print *, 5 !$omp parallel !CHECK: invalid branch into an OpenMP structured block !CHECK: In the enclosing SINGLE directive branched into !CHECK: invalid branch leaving an OpenMP structured block !CHECK: Outside the enclosing PARALLEL directive call omp_alt_return_spec(n, *8, *9) print *, "Normal Return" !$omp single 8 print *, "1st alternate return" !$omp end single !$omp end parallel 9 print *, "2nd alternate return" end program