Hi Tobias,
Am 24.08.22 um 19:47 schrieb Tobias Burnus:
This patch is about error diagnostic + an ICE for invalid code.
[...]
(So far, so good, but then the parsing-code did run into a bug.)
For the blocks, the following applies. OpenMP permits either
* strictly structured blocks (with optional END_ST == 'end target')
!$omp target
block
...
end block
!$omp end target ! << this line is optional
* loosely structured block
!$omp target
... ! may not start with 'block' (and hence cannot end with 'end
block')
!$omp end target ! << required
The parsing issue is in the following code,
which first takes care of the 'strictly': 'end block' + optional 'end
target'
and then of the 'loosely structured' case with just: 'end target':
else if (block_construct && st == ST_END_BLOCK)
...
st = next_statement ();
if (st == omp_end_st)
accept_statement (st);
...
else if (st != omp_end_st)
{
unexpected_statement (st);
st = next_statement ();
}
The fix is to change the second if condition to:
else if (st != omp_end_st || (block_construct && st == omp_end_st))
or rather to the following equivalent code:
else if (st != omp_end_st || block_construct)
LGTM.
OK for mainline and GCC 12?*
Yes for both.
Thanks for the patch!
Harald
Tobias
*strictly structured blocks were added in r12-4592.
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201,
80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer:
Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München;
Registergericht München, HRB 106955