https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104649

--- Comment #3 from Paul Thomas <pault at gcc dot gnu.org> ---
(In reply to kargl from comment #2)
> Null pointer dereference.
> 
> 
> diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
> index bd586e75008..8e2cd511c4d 100644
> --- a/gcc/fortran/decl.cc
> +++ b/gcc/fortran/decl.cc
> @@ -6730,12 +6730,20 @@ ok:
>             || (p->next == NULL && q->next != NULL))
>           arg_count_mismatch = true;
>         else if ((p->sym == NULL && q->sym == NULL)
> -                 || strcmp (p->sym->name, q->sym->name) == 0)
> +                 || (p->sym && q->sym
> +                     && strcmp (p->sym->name, q->sym->name) == 0))
>           continue;
>         else
> -         gfc_error_now ("Mismatch in MODULE PROCEDURE formal "
> -                        "argument names (%s/%s) at %C",
> -                        p->sym->name, q->sym->name);
> +         {
> +           if (q->sym)
> +             gfc_error_now ("Mismatch in MODULE PROCEDURE formal "
> +                             "argument names (%qs/%qs) at %C",
> +                             p->sym->name, q->sym->name);
> +           else
> +             gfc_error_now ("Mismatch in MODULE PROCEDURE formal argument "
> +                             "name, %qs, and alternate return at %C",
> +                             p->sym->name);
> +         }
>       }
>  
>        if (arg_count_mismatch)

The second testcase still segfaults and everything is so optimised away that I
cannot figure out why.

Paul

Reply via email to