Hi all,
I'm new to gcc and this is my first patch. The idea is not have another
resolution of a pointer if an error has occurred previously. I hope this
meets all the criteria for a patch. In case anything is missing or
wrong, I'm open to add to or change the patch.
Best regards,
Linus König
2020-04-06 Linus Koenig <l...@sig-st.de>
PR fortran/94192
* resolve.c (resolve_fl_var_and_proc): Set flag "error" to 1 if
pointer is found to not have an assumed rank or a deferred shape.
* simplify.c (simplify_bound): If an error has been issued for a
given pointer, one should not attempt to find its bounds.
2020-04-06 Linus Koenig <l...@sig-st.de>
PR fortran/94192
* gfortran.dg/bound_resolve_after_error_1.f90: New test.
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 23b5a2b4439..ca149c0dd00 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -12607,6 +12607,7 @@ resolve_fl_var_and_proc (gfc_symbol *sym, int mp_flag)
{
gfc_error ("Array pointer %qs at %L must have a deferred shape or "
"assumed rank", sym->name, &sym->declared_at);
+ sym->error = 1;
return false;
}
}
diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c
index 66ed925c10d..54af85bcab8 100644
--- a/gcc/fortran/simplify.c
+++ b/gcc/fortran/simplify.c
@@ -4089,10 +4089,19 @@ returnNull:
static gfc_expr *
simplify_bound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper)
{
+ gfc_symbol *array_sym;
gfc_ref *ref;
gfc_array_spec *as;
int d;
+ /* Do not attempt to resolve if error has already been issued. */
+ if (array&&array->symtree&&array->symtree->n.sym)
+ {
+ array_sym = array->symtree->n.sym;
+ if (array_sym->error && array_sym->resolved)
+ return NULL;
+ }
+
if (array->ts.type == BT_CLASS)
return NULL;
! Testcase for bound check after issued error
! See PR 94192
! { dg-do compile }
program bound_for_illegal
contains
subroutine bnds(a) ! { dg-error "must have a deferred shape or assumed rank"
}
integer, pointer, intent(in) :: a(1:2)
print *,lbound(a)
end subroutine bnds
end program bound_for_illegal