2011-09-04 Janus Weil <janus@gcc.gnu.org>
authorjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Sep 2011 10:49:13 +0000 (10:49 +0000)
committerjanus <janus@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 4 Sep 2011 10:49:13 +0000 (10:49 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@178509 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/trans-types.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/class_45a.f03 [new file with mode: 0644]
gcc/testsuite/gfortran.dg/class_45b.f03 [new file with mode: 0644]

index 397aa77..b8c5e01 100644 (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
index f66878a..43f1a19 100644 (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
        {
index 3b6556d..e60b884 100644 (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>
 
diff --git a/gcc/testsuite/gfortran.dg/class_45a.f03 b/gcc/testsuite/gfortran.dg/class_45a.f03
new file mode 100644 (file)
index 0000000..af8932a
--- /dev/null
@@ -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 (file)
index 0000000..e37fa96
--- /dev/null
@@ -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" } }