aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJanus Weil <janus@gcc.gnu.org>2011-09-04 12:49:13 +0200
committerJanus Weil <janus@gcc.gnu.org>2011-09-04 12:49:13 +0200
commit30ff79fa55aa75aa5966c2eb7426263fb71e4183 (patch)
treeeb6b9c7d3a2d46fded678ccec8347eb6aebb64dc /gcc
parentad949bcc5e482ddd34bff6a3d01d02d5866155f8 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/fortran/trans-types.c3
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/class_45a.f0328
-rw-r--r--gcc/testsuite/gfortran.dg/class_45b.f0314
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" } }