Commit 100291de by Jakub Jelinek Committed by Jakub Jelinek

re PR fortran/86421 (OpenMP declare simd linear ref in module causes gfortran to bail out)

	PR fortran/86421
	* module.c (omp_declare_simd_clauses): Add LINEAR with _REF, _VAL and
	_UVAL suffixes.
	(mio_omp_declare_simd): Save and restore ref, val and uval modifiers
	on linear clauses.  Initialize n->where to gfc_current_locus.

	* gfortran.dg/vect/pr86421.f90: New test.

From-SVN: r262535
parent 0b27c3ed
2018-07-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/86421
* module.c (omp_declare_simd_clauses): Add LINEAR with _REF, _VAL and
_UVAL suffixes.
(mio_omp_declare_simd): Save and restore ref, val and uval modifiers
on linear clauses. Initialize n->where to gfc_current_locus.
2018-07-05 Paul Thomas <pault@gcc.gnu.org>
PR fortran/86408
......
......@@ -4098,6 +4098,9 @@ static const mstring omp_declare_simd_clauses[] =
minit ("UNIFORM", 3),
minit ("LINEAR", 4),
minit ("ALIGNED", 5),
minit ("LINEAR_REF", 33),
minit ("LINEAR_VAL", 34),
minit ("LINEAR_UVAL", 35),
minit (NULL, -1)
};
......@@ -4140,7 +4143,10 @@ mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
}
for (n = ods->clauses->lists[OMP_LIST_LINEAR]; n; n = n->next)
{
mio_name (4, omp_declare_simd_clauses);
if (n->u.linear_op == OMP_LINEAR_DEFAULT)
mio_name (4, omp_declare_simd_clauses);
else
mio_name (32 + n->u.linear_op, omp_declare_simd_clauses);
mio_symbol_ref (&n->sym);
mio_expr (&n->expr);
}
......@@ -4181,11 +4187,20 @@ mio_omp_declare_simd (gfc_namespace *ns, gfc_omp_declare_simd **odsp)
case 4:
case 5:
*ptrs[t - 3] = n = gfc_get_omp_namelist ();
finish_namelist:
n->where = gfc_current_locus;
ptrs[t - 3] = &n->next;
mio_symbol_ref (&n->sym);
if (t != 3)
mio_expr (&n->expr);
break;
case 33:
case 34:
case 35:
*ptrs[1] = n = gfc_get_omp_namelist ();
n->u.linear_op = (enum gfc_omp_linear_op) (t - 32);
t = 4;
goto finish_namelist;
}
}
}
......
2018-07-10 Jakub Jelinek <jakub@redhat.com>
PR fortran/86421
* gfortran.dg/vect/pr86421.f90: New test.
2018-07-09 Martin Sebor <msebor@redhat.com>
PR tree-optimization/86415
......
! PR fortran/86421
! { dg-require-effective-target vect_simd_clones }
! { dg-additional-options "-fopenmp-simd" }
! { dg-additional-options "-mavx" { target avx_runtime } }
module mod86421
implicit none
contains
subroutine foo(x, y, z)
real :: x
integer :: y, z
!$omp declare simd linear(ref(x)) linear(val(y)) linear(uval(z))
x = x + y
z = z + 1
end subroutine
end module mod86421
program pr86421
use mod86421
implicit none
integer :: i, j
real :: a(64)
j = 0
do i = 1, 64
a(i) = i
end do
!$omp simd
do i = 1, 64
call foo (a(i), i, j)
end do
do i = 1, 64
if (a(i) .ne. (2 * i)) stop 1
end do
if (j .ne. 64) stop 2
end program pr86421
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment