re PR fortran/92899 ([OpenMP] ICE in gfc_trans_omp_atomic, at fortran/trans-openmp.c:3769)
PR fortran/92899 * trans-openmp.c (gfc_trans_omp_atomic): For GFC_OMP_ATOMIC_SWAP, do look through conversion on expr2 if any. * testsuite/libgomp.fortran/atomic1.f90: New test. From-SVN: r279266
This commit is contained in:
parent
f5c03155aa
commit
f8ac7d8f35
4 changed files with 58 additions and 2 deletions
|
@ -1,4 +1,10 @@
|
|||
2019-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
2019-12-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/92899
|
||||
* trans-openmp.c (gfc_trans_omp_atomic): For GFC_OMP_ATOMIC_SWAP,
|
||||
do look through conversion on expr2 if any.
|
||||
|
||||
2019-12-11 Steven G. Kargl <kargl@gcc.gnu.org>
|
||||
|
||||
PR fortran/92897
|
||||
* array.c (gfc_set_array_spec): Remove invalid assert() triggered
|
||||
|
|
|
@ -3534,7 +3534,6 @@ gfc_trans_omp_atomic (gfc_code *code)
|
|||
expr2 = code->expr2;
|
||||
if (((atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_MASK)
|
||||
!= GFC_OMP_ATOMIC_WRITE)
|
||||
&& (atomic_code->ext.omp_atomic & GFC_OMP_ATOMIC_SWAP) == 0
|
||||
&& expr2->expr_type == EXPR_FUNCTION
|
||||
&& expr2->value.function.isym
|
||||
&& expr2->value.function.isym->id == GFC_ISYM_CONVERSION)
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2019-12-11 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/92899
|
||||
* testsuite/libgomp.fortran/atomic1.f90: New test.
|
||||
|
||||
2019-12-11 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
PR libgomp/92843
|
||||
|
|
46
libgomp/testsuite/libgomp.fortran/atomic1.f90
Normal file
46
libgomp/testsuite/libgomp.fortran/atomic1.f90
Normal file
|
@ -0,0 +1,46 @@
|
|||
! PR fortran/92899
|
||||
|
||||
program pr92899
|
||||
real :: x = 1.0
|
||||
double precision :: y
|
||||
integer(kind=4) :: z = 4
|
||||
integer(kind=8) :: w
|
||||
!$omp atomic capture
|
||||
y = x
|
||||
x = 2.0
|
||||
!$omp end atomic
|
||||
if (y /= 1.0 .or. x /= 2.0) stop 1
|
||||
!$omp atomic capture
|
||||
x = y
|
||||
y = 3.0
|
||||
!$omp end atomic
|
||||
if (x /= 1.0 .or. y /= 3.0) stop 2
|
||||
!$omp atomic capture
|
||||
w = z
|
||||
z = 5
|
||||
!$omp end atomic
|
||||
if (w /= 4 .or. z /= 5) stop 3
|
||||
!$omp atomic capture
|
||||
z = w
|
||||
w = 6
|
||||
!$omp end atomic
|
||||
if (z /= 4 .or. w /= 6) stop 4
|
||||
!$omp atomic write
|
||||
x = y
|
||||
!$omp end atomic
|
||||
if (x /= 3.0 .or. y /= 3.0) stop 5
|
||||
x = 7.0
|
||||
!$omp atomic write
|
||||
y = x
|
||||
!$omp end atomic
|
||||
if (x /= 7.0 .or. y /= 7.0) stop 6
|
||||
!$omp atomic write
|
||||
z = w
|
||||
!$omp end atomic
|
||||
if (z /= 6 .or. w /= 6) stop 7
|
||||
z = 8
|
||||
!$omp atomic write
|
||||
w = z
|
||||
!$omp end atomic
|
||||
if (z /= 8 .or. w /= 8) stop 8
|
||||
end
|
Loading…
Add table
Reference in a new issue