]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/58355 ([F03] ICE with TYPE, EXTENDS before parent TYPE defined)
authorJanus Weil <janus@gcc.gnu.org>
Sat, 2 Nov 2013 15:56:35 +0000 (16:56 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Sat, 2 Nov 2013 15:56:35 +0000 (16:56 +0100)
2013-11-02  Janus Weil  <janus@gcc.gnu.org>

Backport from mainline
2013-09-23  Janus Weil  <janus@gcc.gnu.org>

PR fortran/58355
* decl.c (check_extended_derived_type): Prevent segfault, modify error
message.

2013-11-02  Janus Weil  <janus@gcc.gnu.org>

Backport from mainline
2013-09-23  Janus Weil  <janus@gcc.gnu.org>

PR fortran/58355
* gfortran.dg/extends_15.f90: New.

From-SVN: r204320

gcc/fortran/ChangeLog
gcc/fortran/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/extends_15.f90 [new file with mode: 0644]

index ba8b8d03deb2edb6874678691b9431bdb0a18953..a42b4500b55b321435c128eb3661246d74968a1f 100644 (file)
@@ -1,3 +1,12 @@
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/58355
+       * decl.c (check_extended_derived_type): Prevent segfault, modify error
+       message.
+
 2013-08-11  Janus Weil  <janus@gcc.gnu.org>
 
        Backport from trunk:
index 3e9bc18eda6efe413c7e0a6ce676bcbbfe5f0612..3e7c6e618aa944615d13f8dbe29d0d7dd4863026 100644 (file)
@@ -7301,6 +7301,7 @@ syntax:
 
 
 /* Check a derived type that is being extended.  */
+
 static gfc_symbol*
 check_extended_derived_type (char *name)
 {
@@ -7312,14 +7313,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 "
index 076c34129a5a98fd7a3de907c9c2a639f60416b5..0ffba700f77603c5d5d74d554da0eaa3cd2b6a84 100644 (file)
@@ -1,3 +1,11 @@
+2013-11-02  Janus Weil  <janus@gcc.gnu.org>
+
+       Backport from mainline
+       2013-09-23  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/58355
+       * gfortran.dg/extends_15.f90: New.
+
 2013-10-28  Tom de Vries  <tom@codesourcery.com>
 
        * gcc.target/arm/require-pic-register-loc.c: New test.
diff --git a/gcc/testsuite/gfortran.dg/extends_15.f90 b/gcc/testsuite/gfortran.dg/extends_15.f90
new file mode 100644 (file)
index 0000000..06c3179
--- /dev/null
@@ -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" } }