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?


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

Reply via email to