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.
This commit is contained in:
parent
b169b67d7d
commit
33f24eb587
2 changed files with 22 additions and 1 deletions
|
@ -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 ();
|
||||
|
|
|
@ -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
|
||||
|
Loading…
Add table
Reference in a new issue