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;
|
return st;
|
||||||
}
|
}
|
||||||
else if (st != omp_end_st)
|
else if (st != omp_end_st || block_construct)
|
||||||
{
|
{
|
||||||
unexpected_statement (st);
|
unexpected_statement (st);
|
||||||
st = next_statement ();
|
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