re PR fortran/56575 (An invalid OO code causes ICE)

2013-03-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/56575
	* expr.c (gfc_default_initializer): Check that a class declared
	type has any components.
	* resolve.c (resolve_fl_derived0): On failing the test for C437
	set the type to BT_UNKNOWN to prevent repeat error messages.
2013-03-10  Paul Thomas  <pault@gcc.gnu.org>

	PR fortran/56575
	* gfortran.dg/class_56.f90: New test.

From-SVN: r196580
This commit is contained in:
Paul Thomas 2013-03-10 13:23:58 +00:00
parent d16d44d338
commit 8ec4321faf
5 changed files with 40 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2013-03-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/56575
* expr.c (gfc_default_initializer): Check that a class declared
type has any components.
* resolve.c (resolve_fl_derived0): On failing the test for C437
set the type to BT_UNKNOWN to prevent repeat error messages.
2013-03-03 Mikael Morin <mikael@gcc.gnu.org> 2013-03-03 Mikael Morin <mikael@gcc.gnu.org>
PR fortran/56477 PR fortran/56477

View File

@ -3886,7 +3886,8 @@ gfc_default_initializer (gfc_typespec *ts)
types (otherwise we could use gfc_has_default_initializer()). */ types (otherwise we could use gfc_has_default_initializer()). */
for (comp = ts->u.derived->components; comp; comp = comp->next) for (comp = ts->u.derived->components; comp; comp = comp->next)
if (comp->initializer || comp->attr.allocatable if (comp->initializer || comp->attr.allocatable
|| (comp->ts.type == BT_CLASS && CLASS_DATA (comp)->attr.allocatable)) || (comp->ts.type == BT_CLASS && CLASS_DATA (comp)
&& CLASS_DATA (comp)->attr.allocatable))
break; break;
if (!comp) if (!comp)

View File

@ -12866,6 +12866,8 @@ resolve_fl_derived0 (gfc_symbol *sym)
{ {
gfc_error ("Component '%s' with CLASS at %L must be allocatable " gfc_error ("Component '%s' with CLASS at %L must be allocatable "
"or pointer", c->name, &c->loc); "or pointer", c->name, &c->loc);
/* Prevent a recurrence of the error. */
c->ts.type = BT_UNKNOWN;
return FAILURE; return FAILURE;
} }

View File

@ -1,3 +1,8 @@
2013-03-10 Paul Thomas <pault@gcc.gnu.org>
PR fortran/56575
* gfortran.dg/class_56.f90: New test.
2013-03-09 Richard Sandiford <rdsandiford@googlemail.com> 2013-03-09 Richard Sandiford <rdsandiford@googlemail.com>
PR middle-end/56524 PR middle-end/56524
@ -330,7 +335,7 @@
2013-02-21 Marek Polacek <polacek@redhat.com> 2013-02-21 Marek Polacek <polacek@redhat.com>
PR tree-optimization/56398 PR tree-optimization/56398
* g++.dg/torture/pr56398.C: New test. * g++.dg/torture/pr56398.C: New test.
2013-02-21 Jakub Jelinek <jakub@redhat.com> 2013-02-21 Jakub Jelinek <jakub@redhat.com>

View File

@ -0,0 +1,22 @@
! { dg-do compile }
! Test fix for PR56575.
!
! Contributed by A Kasahara <latlon90180+gcc_bugzilla@gmail.com>
!
module lib_container
implicit none
type:: Object
end type Object
type:: Container
class(Object):: v ! { dg-error "must be allocatable or pointer" }
end type Container
contains
subroutine proc(self)
class(Container), intent(inout):: self
end subroutine proc
end module lib_container