diff options
author | Janus Weil <janus@gcc.gnu.org> | 2011-09-04 12:49:13 +0200 |
---|---|---|
committer | Janus Weil <janus@gcc.gnu.org> | 2011-09-04 12:49:13 +0200 |
commit | 30ff79fa55aa75aa5966c2eb7426263fb71e4183 (patch) | |
tree | eb6b9c7d3a2d46fded678ccec8347eb6aebb64dc /gcc | |
parent | ad949bcc5e482ddd34bff6a3d01d02d5866155f8 (diff) | |
download | gcc-30ff79fa55aa75aa5966c2eb7426263fb71e4183.zip gcc-30ff79fa55aa75aa5966c2eb7426263fb71e4183.tar.gz gcc-30ff79fa55aa75aa5966c2eb7426263fb71e4183.tar.bz2 |
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/fortran/trans-types.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_45a.f03 | 28 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/class_45b.f03 | 14 |
5 files changed, 55 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 397aa77..b8c5e01 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -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 diff --git a/gcc/fortran/trans-types.c b/gcc/fortran/trans-types.c index f66878a..43f1a19 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 3b6556d..e60b884 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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> diff --git a/gcc/testsuite/gfortran.dg/class_45a.f03 b/gcc/testsuite/gfortran.dg/class_45a.f03 new file mode 100644 index 0000000..af8932a --- /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 <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 diff --git a/gcc/testsuite/gfortran.dg/class_45b.f03 b/gcc/testsuite/gfortran.dg/class_45b.f03 new file mode 100644 index 0000000..e37fa96 --- /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 <abenson@caltech.edu> + +program Test + use G_Nodes + class(t0), allocatable :: c + allocate(t1 :: c) +end program Test + +! { dg-final { cleanup-modules "G_Nodes" } } |