diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2022-08-25 08:34:03 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2022-08-25 08:34:40 +0200 |
commit | 33f24eb58748e9db7c827662753757c5c2217eb4 (patch) | |
tree | 08228575d3b67dad3f6bd3253bf2f6fa39c887c5 /gcc | |
parent | b169b67d7dafe2b786f87c31d6b2efc603fd880c (diff) | |
download | gcc-33f24eb58748e9db7c827662753757c5c2217eb4.zip gcc-33f24eb58748e9db7c827662753757c5c2217eb4.tar.gz gcc-33f24eb58748e9db7c827662753757c5c2217eb4.tar.bz2 |
Fortran/OpenMP: Fix strictly structured blocks parsing
gcc/fortran/ChangeLog:
* parse.cc (parse_omp_structured_block): When parsing strictly
structured blocks, issue an error if the end-directive comes
before the 'end block'.
gcc/testsuite/ChangeLog:
* gfortran.dg/gomp/strictly-structured-block-4.f90: New test.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/parse.cc | 2 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90 | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/gcc/fortran/parse.cc b/gcc/fortran/parse.cc index 0b4c596..80492c9 100644 --- a/gcc/fortran/parse.cc +++ b/gcc/fortran/parse.cc @@ -5709,7 +5709,7 @@ parse_omp_structured_block (gfc_statement omp_st, bool workshare_stmts_only) } return st; } - else if (st != omp_end_st) + else if (st != omp_end_st || block_construct) { unexpected_statement (st); st = next_statement (); diff --git a/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90 b/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90 new file mode 100644 index 0000000..66cf0a3 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/strictly-structured-block-4.f90 @@ -0,0 +1,21 @@ +! { dg-do compile } +implicit none +integer ::x,z +x = 42 +print '(*(z16:" "))', loc(x) +!$omp target map(x, z) +block + integer :: y + x = 123 + y = 99 + !$omp target device(ancestor:1) map(always,tofrom:x) map(y) ! { dg-error "'ancestor' device modifier not preceded by 'requires' directive with 'reverse_offload' clause" } + print '(*(z16:" "))', loc(x), loc(y) + print * ,x, y + x = -x + y = -y + !$omp end target ! { dg-error "Unexpected ..OMP END TARGET statement" } + z = y +end block + print * ,x !, z +end + |