Hi Thomas, > Gesendet: Dienstag, 10. Dezember 2019 um 23:34 Uhr > Von: "Thomas Koenig" <tkoe...@netcologne.de> > An: "Harald Anlauf" <anl...@gmx.de>, gfortran <fort...@gcc.gnu.org>, > gcc-patches <gcc-patches@gcc.gnu.org> > Betreff: Re: [Patch, Fortran] PR92898 - [9/10 Regression] ICE in > gfc_check_is_contiguous, at fortran/check.c:7157 > > Hello Harald, > > > Index: gcc/fortran/check.c > > =================================================================== > > --- gcc/fortran/check.c (Revision 279183) > > +++ gcc/fortran/check.c (Arbeitskopie) > > @@ -7154,7 +7154,9 @@ bool > > gfc_check_is_contiguous (gfc_expr *array) > > { > > if (array->expr_type == EXPR_NULL > > - && array->symtree->n.sym->attr.pointer == 1) > > + && (!array->symtree || > > + (array->symtree->n.sym && > > + array->symtree->n.sym->attr.pointer == 1))) > > I have to admit I do not understand the original code here, nor > do I quite understand your fix. > > Is there any circumstance where array->expr_type == EXPR_NULL, but > is_contiguous is valid? What would go wrong if the other tests > were removed?
Actually I do not know what the additional check was supposed to do. Removing it does not seem to do any harm. See below. > > > Index: gcc/testsuite/gfortran.dg/pr91641.f90 > > =================================================================== > > --- gcc/testsuite/gfortran.dg/pr91641.f90 (Revision 279183) > > +++ gcc/testsuite/gfortran.dg/pr91641.f90 (Arbeitskopie) > > @@ -1,7 +1,9 @@ > > ! { dg-do compile } > > ! PR fortran/91641 > > -! Code conyributed by Gerhard Steinmetz > > +! PR fortran/92898 > > +! Code contributed by Gerhard Steinmetz > > program p > > real, pointer :: z(:) > > print *, is_contiguous (null(z)) ! { dg-error "shall be an > > associated" } > > + print *, is_contiguous (null()) ! { dg-error "shall be an > > associated" } > > end > > Sometimes, it is necessary to change test cases, when error messages > change. If this is not the case, it is better to add new tests to > new test cases - this makes regression hunting much easier. > > Regards > > Thomas Agreed. Please find the modified patches below. OK for trunk / 9 ? Thanks, Harald Index: gcc/fortran/check.c =================================================================== --- gcc/fortran/check.c (Revision 279254) +++ gcc/fortran/check.c (Arbeitskopie) @@ -7153,8 +7153,7 @@ gfc_check_ttynam_sub (gfc_expr *unit, gfc_expr *na bool gfc_check_is_contiguous (gfc_expr *array) { - if (array->expr_type == EXPR_NULL - && array->symtree->n.sym->attr.pointer == 1) + if (array->expr_type == EXPR_NULL) { gfc_error ("Actual argument at %L of %qs intrinsic shall be an " "associated pointer", &array->where, gfc_current_intrinsic); Index: gcc/testsuite/gfortran.dg/pr92898.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr92898.f90 (nicht existent) +++ gcc/testsuite/gfortran.dg/pr92898.f90 (Arbeitskopie) @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/92898 +! Code contributed by Gerhard Steinmetz +program p + print *, is_contiguous (null()) ! { dg-error "shall be an associated" } +end 2019-12-11 Harald Anlauf <anl...@gmx.de> PR fortran/92898 * check.c (gfc_check_is_contiguous): Simplify check to handle arbitrary NULL() argument. 2019-12-11 Harald Anlauf <anl...@gmx.de> PR fortran/92898 * gfortran.dg/pr92898.f90: New test.