On Mon, Apr 6, 2020 at 8:51 AM Linus König <l...@sig-st.de> wrote: > > 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.
First, thanks for your work. In principle the patch looks fine. I was surprised that I could find no other code that uses gfc_symbol::error; however, your usage of it seems appropriate. A note about style, there should be spaces between logical operators: /* Do not attempt to resolve if error has already been issued. */ - if (array&&array->symtree&&array->symtree->n.sym) + if (array && array->symtree && array->symtree->n.sym) { Additionally, in simplify.c (simplify_bound) you can see the surrounding code does not check array or array->symtree->n.sym for NULL. One can assume this precondition holds and factor the code slightly simpler. I believe also it is sufficient to check only "if (array_sym->error)". By the time sym->error is set in resolve_fl_var_and_proc, sym->resolved must already be set to 1 because this is the first step in resolve_symbol. diff --git a/gcc/fortran/simplify.c b/gcc/fortran/simplify.c index 66ed925c10d..84aeafc1e8b 100644 --- a/gcc/fortran/simplify.c +++ b/gcc/fortran/simplify.c @@ -4090,6 +4090,7 @@ static gfc_expr * simplify_bound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper) { gfc_ref *ref; + gfc_symbol *array_sym; gfc_array_spec *as; int d; @@ -4103,8 +4104,13 @@ simplify_bound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper) goto done; } + /* Do not attempt to resolve if error has already been issued. */ + array_sym = array->symtree->n.sym; + if (array_sym->error) + return NULL; + /* Follow any component references. */ - as = array->symtree->n.sym->as; + as = array_sym->as; for (ref = array->ref; ref; ref = ref->next) { switch (ref->type) Thanks again for your patch. --- Fritz Reese