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

--- Comment #3 from kargl at gcc dot gnu.org ---
(In reply to kargl from comment #2)
> (In reply to G. Steinmetz from comment #1)
> > Related :
> > 
> > 
> > $ cat z2.f90
> > module m
> >    interface
> >       module function f()
> >       end
> >    end interface
> >    interface
> >       function f() bind(c)
> >       end
> >    end interface
> > end
> > 
> > 
> > $ gfortran-11-20200524 -c z2.f90
> > f951: internal compiler error: Segmentation fault
> > 0xbc0f6f crash_signal
> >         ../../gcc/toplev.c:328
> > 0x643eeb gfc_match_function_decl()
> >         ../../gcc/fortran/decl.c:7398
> > 0x6a82ca decode_statement
> >         ../../gcc/fortran/parse.c:343
> > 0x6a9e1a next_free
> >         ../../gcc/fortran/parse.c:1279
> > 0x6a9e1a next_statement
> >         ../../gcc/fortran/parse.c:1511
> > 0x6aba5c parse_interface
> >         ../../gcc/fortran/parse.c:3519
> > 0x6aba5c parse_spec
> >         ../../gcc/fortran/parse.c:3875
> > 0x6af43e parse_module
> >         ../../gcc/fortran/parse.c:6115
> > 0x6af787 gfc_parse_file()
> >         ../../gcc/fortran/parse.c:6428
> > 0x6fb9af gfc_be_parse_file
> >         ../../gcc/fortran/f95-lang.c:210
> 
> Index: gcc/fortran/decl.c
> ===================================================================
> --- gcc/fortran/decl.c        (revision 280157)
> +++ gcc/fortran/decl.c        (working copy)
> @@ -7325,7 +7325,8 @@ gfc_match_function_decl (void)
>       procedure interface body.  */
>      if (sym->attr.is_bind_c && sym->attr.module_procedure && sym->old_symbol
>       && strcmp (sym->name, sym->old_symbol->name) == 0
> -     && strcmp (sym->binding_label, sym->old_symbol->binding_label) != 0)
> +     && (!sym->old_symbol->binding_label
> +         || strcmp (sym->binding_label, sym->old_symbol->binding_label) != 
> 0))
>        {
>         const char *null = "NULL", *s1, *s2;
>         s1 = sym->binding_label;

Index: gcc/fortran/decl.c
===================================================================
--- gcc/fortran/decl.c  (revision 280157)
+++ gcc/fortran/decl.c  (working copy)
@@ -7325,7 +7325,8 @@ gfc_match_function_decl (void)
      procedure interface body.  */
     if (sym->attr.is_bind_c && sym->attr.module_procedure && sym->old_symbol
        && strcmp (sym->name, sym->old_symbol->name) == 0
-       && strcmp (sym->binding_label, sym->old_symbol->binding_label) != 0)
+       && (!sym->old_symbol->binding_label
+           || strcmp (sym->binding_label, sym->old_symbol->binding_label) !=
0))
       {
          const char *null = "NULL", *s1, *s2;
          s1 = sym->binding_label;
@@ -7840,7 +7841,8 @@ gfc_match_subroutine (void)
         procedure interface body.  */
       if (sym->attr.module_procedure && sym->old_symbol
          && strcmp (sym->name, sym->old_symbol->name) == 0
-         && strcmp (sym->binding_label, sym->old_symbol->binding_label) != 0)
+         && (!sym->old_symbol->binding_label
+             || strcmp (sym->binding_label, sym->old_symbol->binding_label) !=
0))
        {
          const char *null = "NULL", *s1, *s2;
          s1 = sym->binding_label;

Reply via email to