diff options
author | Janus Weil <janus@gcc.gnu.org> | 2013-09-23 09:40:39 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2013-09-23 09:40:39 +0200 |
commit | 42e3d759b982c73b1ceb7606a25b3f368d8f3c78 (patch) | |
tree | 9a4cf80f0b185958cd3fd4429e1c44f984ee20cb /gcc | |
parent | fb635b112339db93acd6054b464473ea94dd195f (diff) | |
download | gcc-42e3d759b982c73b1ceb7606a25b3f368d8f3c78.zip gcc-42e3d759b982c73b1ceb7606a25b3f368d8f3c78.tar.gz gcc-42e3d759b982c73b1ceb7606a25b3f368d8f3c78.tar.bz2 |
re PR fortran/58355 ([F03] ICE with TYPE, EXTENDS before parent TYPE defined)
2013-09-23 Janus Weil <janus@gcc.gnu.org>
PR fortran/58355
* decl.c (check_extended_derived_type): Prevent segfault, modify error
message.
2013-09-23 Janus Weil <janus@gcc.gnu.org>
PR fortran/58355
* gfortran.dg/extends_15.f90: New.
From-SVN: r202823
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/decl.c | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/extends_15.f90 | 16 |
4 files changed, 32 insertions, 3 deletions
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 <janus@gcc.gnu.org> + + PR fortran/58355 + * decl.c (check_extended_derived_type): Prevent segfault, modify error + message. + 2013-09-20 Janus Weil <janus@gcc.gnu.org> 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 " diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2fc781a..e17d519 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2013-09-23 Janus Weil <janus@gcc.gnu.org> + + PR fortran/58355 + * gfortran.dg/extends_15.f90: New. + 2013-09-20 Paolo Carlini <paolo.carlini@oracle.com> PR c++/58481 diff --git a/gcc/testsuite/gfortran.dg/extends_15.f90 b/gcc/testsuite/gfortran.dg/extends_15.f90 new file mode 100644 index 0000000..06c3179 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/extends_15.f90 @@ -0,0 +1,16 @@ +! { dg-do compile } +! +! PR 58355: [4.7/4.8/4.9 Regression] [F03] ICE with TYPE, EXTENDS before parent TYPE defined +! +! Contributed by Andrew Benson <abensonca@gmail.com> + +module ct + public :: t1 + + type, extends(t1) :: t2 ! { dg-error "has not been previously defined" } + + type :: t1 + end type +end + +! { dg-final { cleanup-modules "ct" } } |