[Bug fortran/82866] [PDT] ICE in resolve_fl_derived0, at fortran/resolve.c:14004

kargl at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Nov 6 19:12:00 GMT 2017


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

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #4 from kargl at gcc dot gnu.org ---
(In reply to G. Steinmetz from comment #0)
> With invalid code similar to pr82586 :
> 
> 
> $ cat z1.f90
> module m
>    type t(*)
>    end type
> end
> 
> 
> $ /gfortran-8-20171105 -c z1.f90
> f951: internal compiler error: Segmentation fault
> 0xb60fdf crash_signal
>         ../../gcc/toplev.c:324
> 0x7056d8 resolve_fl_derived0
>         ../../gcc/fortran/resolve.c:14004
> 0x70579b resolve_fl_derived
>         ../../gcc/fortran/resolve.c:14075
> 0x70035f resolve_symbol
>         ../../gcc/fortran/resolve.c:14434
> 0x71ae0b do_traverse_symtree
>         ../../gcc/fortran/symbol.c:4157
> 0x70371a resolve_types
>         ../../gcc/fortran/resolve.c:16326
> 0x6ff04c gfc_resolve(gfc_namespace*)
>         ../../gcc/fortran/resolve.c:16440
> 0x6e8ee4 gfc_parse_file()
>         ../../gcc/fortran/parse.c:6232
> 0x72d3bf gfc_be_parse_file
>         ../../gcc/fortran/f95-lang.c:204

% svn diff resolve.c 
Index: resolve.c
===================================================================
--- resolve.c   (revision 254461)
+++ resolve.c   (working copy)
@@ -14001,13 +14001,19 @@ resolve_fl_derived0 (gfc_symbol *sym)
     {
       for (f = sym->formal; f; f = f->next)
        {
-         c = gfc_find_component (sym, f->sym->name, true, true, NULL);
-         if (c == NULL)
+         if (!f->sym)
            {
              gfc_error ("Parameterized type %qs does not have a component "
+                        "at %L", sym->name, &sym->declared_at);
+             return false;
+           }
+
+         if (!gfc_find_component (sym, f->sym->name, true, true, NULL))
+           {
+             gfc_error ("Parameterized type %qs does not have a component "
                         "corresponding to parameter %qs at %L", sym->name,
                         f->sym->name, &sym->declared_at);
-             break;
+             return false;
            }
        }
     }


More information about the Gcc-bugs mailing list