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

--- Comment #7 from kargl at gcc dot gnu.org ---

> $ cat zc1.f90
> module m
>    type t
>    contains
>       procedure :: s
>       generic :: write(unformatted) => s
>    end type
> contains
>    subroutine s(dtv, *)
>       class(t), intent(out) :: dtv
>    end
> end
> 
> 
> $ gfortran-7-20160911 zc1.f90
> zc1.f90:8:19:
> 
>     subroutine s(dtv, *)
>                    1
> Error: DTIO dummy argument at (1) must have intent IN
> f951: internal compiler error: Segmentation fault
> 0xc2154f crash_signal
>         ../../gcc/toplev.c:336
> 0x69290d check_dtio_arg_TKR_intent
>         ../../gcc/fortran/interface.c:4561
> 0x692b4a check_dtio_interface1
>         ../../gcc/fortran/interface.c:4676
> 0x69a303 gfc_check_dtio_interfaces(gfc_symbol*)
>         ../../gcc/fortran/interface.c:4735
> 0x70c86b do_traverse_symtree
>         ../../gcc/fortran/symbol.c:3939
> 0x6f65c0 resolve_types
>         ../../gcc/fortran/resolve.c:15658
> 0x6f1d9c gfc_resolve(gfc_namespace*)
>         ../../gcc/fortran/resolve.c:15730
> 0x6dd3a4 gfc_parse_file()
>         ../../gcc/fortran/parse.c:6056
> 0x71f5f2 gfc_be_parse_file
>         ../../gcc/fortran/f95-lang.c:198
> 
troutmask:sgk[232] svn diff interface.c |more
Index: interface.c
===================================================================
--- interface.c (revision 240119)
+++ interface.c (working copy)
@@ -4558,6 +4558,9 @@ static void
 check_dtio_arg_TKR_intent (gfc_symbol *fsym, bool typebound, bt type,
                           int kind, int rank, sym_intent intent)
 {
+  if (!fsym)
+    return;
+
   if (fsym->ts.type != type)
     {
       gfc_error ("DTIO dummy argument at %L must be of type %s",
@@ -4584,7 +4587,6 @@ check_dtio_arg_TKR_intent (gfc_symbol *f
   if (fsym->attr.intent != intent)
     gfc_error ("DTIO dummy argument at %L must have intent %s",
               &fsym->declared_at, gfc_code2string (intents, (int)intent));
-  return;
 }

Reply via email to