openmp, fortran: Improve !$omp atomic checks [PR104328]
authorJakub Jelinek <jakub@redhat.com>
Thu, 3 Feb 2022 08:01:07 +0000 (09:01 +0100)
committerJakub Jelinek <jakub@redhat.com>
Thu, 3 Feb 2022 08:01:07 +0000 (09:01 +0100)
commit54d21dd5b5c5c5539505b3e037cdecb3b0ab3918
treee08ec2f11ac4a43808929b103d773837c5c70d60
parent501c4ee9fad68716497db4d96b63b801cc57b4a1
openmp, fortran: Improve !$omp atomic checks [PR104328]

The testcase shows some cases that weren't verified and we ICE on
invalid because of that.
One problem is that unlike before, we weren't checking if some expression
is EXPR_VARIABLE with non-NULL symtree in the case where there was
a conversion around it.
The other two issues is that we check that in an IF ->block is non-NULL
and then immediately dereference ->block->next->op, but on invalid
code with no statements in the then clause ->block->next might be NULL.

2022-02-02  Jakub Jelinek  <jakub@redhat.com>

PR fortran/104328
* openmp.cc (is_scalar_intrinsic_expr): If must_be_var && conv_ok
and expr is conversion, verify it is a conversion from EXPR_VARIABLE
with non-NULL symtree.  Check ->block->next before dereferencing it.

* gfortran.dg/gomp/atomic-27.f90: New test.
gcc/fortran/openmp.cc
gcc/testsuite/gfortran.dg/gomp/atomic-27.f90 [new file with mode: 0644]