Subject says it all. OK to commit? 2018-05-23 Steven G. Kargl <ka...@gcc.gnu.org>
PR fortran/85779 *decl.c (gfc_match_derived_decl): Fix NULL point dereference. 2018-05-23 Steven G. Kargl <ka...@gcc.gnu.org> PR fortran/85779 * gfortran.dg/pr85779_1.f90: New test. * gfortran.dg/pr85779_2.f90: Ditto. * gfortran.dg/pr85779_3.f90: Ditto. -- Steve
Index: gcc/fortran/decl.c =================================================================== --- gcc/fortran/decl.c (revision 260623) +++ gcc/fortran/decl.c (working copy) @@ -9960,8 +9960,12 @@ gfc_match_derived_decl (void) if (!gensym->attr.generic && gensym->ts.type != BT_UNKNOWN) { - gfc_error ("Derived type name %qs at %C already has a basic type " - "of %s", gensym->name, gfc_typename (&gensym->ts)); + if (gensym->ts.u.derived) + gfc_error ("Derived type name %qs at %C already has a basic type " + "of %s", gensym->name, gfc_typename (&gensym->ts)); + else + gfc_error ("Derived type name %qs at %C already has a basic type", + gensym->name); return MATCH_ERROR; } Index: gcc/testsuite/gfortran.dg/pr85779_1.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr85779_1.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr85779_1.f90 (working copy) @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/85779 +type(t) function f() ! { dg-error "is not accessible" } + type f ! { dg-error "already has a basic type" } + end type ! { dg-error "END FUNCTION statement" } +end Index: gcc/testsuite/gfortran.dg/pr85779_2.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr85779_2.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr85779_2.f90 (working copy) @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/85779 +type(t) function f() result(z) ! { dg-error "is not accessible" } + type z ! { dg-error "already has a basic type" } + end type ! { dg-error "END FUNCTION statement" } +end + Index: gcc/testsuite/gfortran.dg/pr85779_3.f90 =================================================================== --- gcc/testsuite/gfortran.dg/pr85779_3.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr85779_3.f90 (working copy) @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/85779 +class(t) function f() ! { dg-error "must be dummy, allocatable or pointer" } + type f ! { dg-error "already has a basic type" } + end type ! { dg-error "END FUNCTION statement" } +end +