re PR fortran/50227 ([OOP] ICE-on-valid with allocatable class variable)

2011-09-04  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/50227
	* trans-types.c (gfc_sym_type): Check for proc_name.

2011-09-04  Janus Weil  <janus@gcc.gnu.org>

	PR fortran/50227
	* gfortran.dg/class_45a.f03: New.
	* gfortran.dg/class_45b.f03: New.

From-SVN: r178509
This commit is contained in:
Janus Weil 2011-09-04 12:49:13 +02:00
parent ad949bcc5e
commit 30ff79fa55
5 changed files with 55 additions and 1 deletions

View File

@ -1,3 +1,8 @@
2011-09-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/50227
* trans-types.c (gfc_sym_type): Check for proc_name.
2011-08-30 Tobias Burnus <burnus@net-b.de>
PR fortran/45044

View File

@ -2109,7 +2109,8 @@ gfc_sym_type (gfc_symbol * sym)
{
/* We must use pointer types for potentially absent variables. The
optimizers assume a reference type argument is never NULL. */
if (sym->attr.optional || sym->ns->proc_name->attr.entry_master)
if (sym->attr.optional
|| (sym->ns->proc_name && sym->ns->proc_name->attr.entry_master))
type = build_pointer_type (type);
else
{

View File

@ -1,3 +1,9 @@
2011-09-04 Janus Weil <janus@gcc.gnu.org>
PR fortran/50227
* gfortran.dg/class_45a.f03: New.
* gfortran.dg/class_45b.f03: New.
2011-09-04 Jakub Jelinek <jakub@redhat.com>
Ira Rosen <ira.rosen@linaro.org>

View File

@ -0,0 +1,28 @@
! { dg-do compile }
!
! PR 50227: [4.7 Regression] [OOP] ICE-on-valid with allocatable class variable
!
! Contributed by Andrew Benson <abenson@caltech.edu>
module G_Nodes
private
type, public :: t0
end type
type, public, extends(t0) :: t1
end type
contains
function basicGet(self)
implicit none
class(t0), pointer :: basicGet
class(t0), intent(in) :: self
select type (self)
type is (t1)
basicGet => self
end select
end function basicGet
end module G_Nodes

View File

@ -0,0 +1,14 @@
! { dg-do run }
! { dg-additional-sources class_45a.f03 }
!
! PR 50227: [4.7 Regression] [OOP] ICE-on-valid with allocatable class variable
!
! Contributed by Andrew Benson <abenson@caltech.edu>
program Test
use G_Nodes
class(t0), allocatable :: c
allocate(t1 :: c)
end program Test
! { dg-final { cleanup-modules "G_Nodes" } }