diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 397aa771040..b8c5e0119ba 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,8 @@ +2011-09-04 Janus Weil + + PR fortran/50227 + * trans-types.c (gfc_sym_type): Check for proc_name. + 2011-08-30 Tobias Burnus PR fortran/45044 diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index f66878a1c89..43f1a19cc83 100644 --- a/gcc/fortran/trans-types.c +++ b/gcc/fortran/trans-types.c @@ -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 { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 3b6556dcc0a..e60b88432f9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-09-04 Janus Weil + + PR fortran/50227 + * gfortran.dg/class_45a.f03: New. + * gfortran.dg/class_45b.f03: New. + 2011-09-04 Jakub Jelinek Ira Rosen diff --git a/gcc/testsuite/gfortran.dg/class_45a.f03 b/gcc/testsuite/gfortran.dg/class_45a.f03 new file mode 100644 index 00000000000..af8932a6b18 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_45a.f03 @@ -0,0 +1,28 @@ +! { dg-do compile } +! +! PR 50227: [4.7 Regression] [OOP] ICE-on-valid with allocatable class variable +! +! Contributed by Andrew Benson + +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 diff --git a/gcc/testsuite/gfortran.dg/class_45b.f03 b/gcc/testsuite/gfortran.dg/class_45b.f03 new file mode 100644 index 00000000000..e37fa96d3c2 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/class_45b.f03 @@ -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 + +program Test + use G_Nodes + class(t0), allocatable :: c + allocate(t1 :: c) +end program Test + +! { dg-final { cleanup-modules "G_Nodes" } }