[committed] Fix ICE with invalid OpenMP linear clauses (PR fortran/84116)
Jakub Jelinek
jakub@redhat.com
Wed Jan 31 20:50:00 GMT 2018
Hi!
If the gfc_match_omp_variable_list calls fail, they don't modify head,
so *head means referencing NULL. In that case we don't really need to
free anything, nothing has been allocated, just need to emit a syntax error.
Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk.
2018-01-31 Jakub Jelinek <jakub@redhat.com>
PR fortran/84116
* openmp.c (gfc_match_omp_clauses): If all the linear
gfc_match_omp_variable_list calls failed, don't gfc_free_omp_namelist
nor set *head = NULL. Formatting fixes.
* gfortran.dg/gomp/pr84116.f90: New test.
--- gcc/fortran/openmp.c.jj 2018-01-03 10:20:22.629538350 +0100
+++ gcc/fortran/openmp.c 2018-01-31 18:10:35.455624605 +0100
@@ -1318,23 +1318,21 @@ gfc_match_omp_clauses (gfc_omp_clauses *
else if (gfc_match_omp_variable_list (" val (",
&c->lists[OMP_LIST_LINEAR],
false, NULL, &head)
- == MATCH_YES)
+ == MATCH_YES)
linear_op = OMP_LINEAR_VAL;
else if (gfc_match_omp_variable_list (" uval (",
&c->lists[OMP_LIST_LINEAR],
false, NULL, &head)
- == MATCH_YES)
+ == MATCH_YES)
linear_op = OMP_LINEAR_UVAL;
else if (gfc_match_omp_variable_list ("",
&c->lists[OMP_LIST_LINEAR],
false, &end_colon, &head)
- == MATCH_YES)
+ == MATCH_YES)
linear_op = OMP_LINEAR_DEFAULT;
else
{
- gfc_free_omp_namelist (*head);
gfc_current_locus = old_loc;
- *head = NULL;
break;
}
if (linear_op != OMP_LINEAR_DEFAULT)
--- gcc/testsuite/gfortran.dg/gomp/pr84116.f90.jj 2018-01-31 18:12:21.345637463 +0100
+++ gcc/testsuite/gfortran.dg/gomp/pr84116.f90 2018-01-31 18:11:59.401634803 +0100
@@ -0,0 +1,12 @@
+! PR fortran/84116
+! { dg-do compile }
+
+program pr84116
+ integer :: i, j
+ !$omp simd linear ((i)) ! { dg-error "Syntax error" }
+ do i = 1, 2
+ end do
+ !$omp simd linear () ! { dg-error "Syntax error" }
+ do j = 1, 2
+ end do
+end
Jakub
More information about the Fortran
mailing list