backport: re PR fortran/58355 ([F03] ICE with TYPE, EXTENDS before parent TYPE defined)

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
This commit is contained in:
Janus Weil 2013-11-02 16:56:35 +01:00
parent 16572a4eb3
commit cb1491c553
4 changed files with 38 additions and 3 deletions

View 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:

View 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 "

View 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.

View File

@ -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" } }