From 42e3d759b982c73b1ceb7606a25b3f368d8f3c78 Mon Sep 17 00:00:00 2001 From: Janus Weil Date: Mon, 23 Sep 2013 09:40:39 +0200 Subject: re PR fortran/58355 ([F03] ICE with TYPE, EXTENDS before parent TYPE defined) 2013-09-23 Janus Weil PR fortran/58355 * decl.c (check_extended_derived_type): Prevent segfault, modify error message. 2013-09-23 Janus Weil PR fortran/58355 * gfortran.dg/extends_15.f90: New. From-SVN: r202823 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/decl.c | 8 +++++--- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 0e4d688..5b032d9 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2013-09-23 Janus Weil + + PR fortran/58355 + * decl.c (check_extended_derived_type): Prevent segfault, modify error + message. + 2013-09-20 Janus Weil PR fortran/58099 diff --git a/gcc/fortran/decl.c b/gcc/fortran/decl.c index 1525119..3a8175f 100644 --- a/gcc/fortran/decl.c +++ b/gcc/fortran/decl.c @@ -7390,6 +7390,7 @@ syntax: /* Check a derived type that is being extended. */ + static gfc_symbol* check_extended_derived_type (char *name) { @@ -7401,14 +7402,15 @@ check_extended_derived_type (char *name) return NULL; } + extended = gfc_find_dt_in_generic (extended); + + /* F08:C428. */ if (!extended) { - gfc_error ("No such symbol in TYPE definition at %C"); + gfc_error ("Symbol '%s' at %C has not been previously defined", name); return NULL; } - extended = gfc_find_dt_in_generic (extended); - if (extended->attr.flavor != FL_DERIVED) { gfc_error ("'%s' in EXTENDS expression at %C is not a " -- cgit v1.1