re PR fortran/54435 (ICE with SELECT TYPE on a non-CLASS object)
authorJanus Weil <janus@gcc.gnu.org>
Tue, 4 Sep 2012 08:03:09 +0000 (10:03 +0200)
committerJanus Weil <janus@gcc.gnu.org>
Tue, 4 Sep 2012 08:03:09 +0000 (10:03 +0200)
2012-09-04  Janus Weil  <janus@gcc.gnu.org>

PR fortran/54435
PR fortran/54443
* match.c (gfc_match_select_type): Make sure to only access CLASS_DATA
for BT_CLASS.

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

PR fortran/54243
PR fortran/54244
* gfortran.dg/select_type_29.f03: New.

From-SVN: r190910

gcc/fortran/ChangeLog
gcc/fortran/match.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/select_type_29.f03 [new file with mode: 0644]

index c1de983..dbafc44 100644 (file)
@@ -1,3 +1,10 @@
+2012-09-04  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/54435
+       PR fortran/54443
+       * match.c (gfc_match_select_type): Make sure to only access CLASS_DATA
+       for BT_CLASS.
+
 2012-09-03  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/54467
index 4c713a5..cf85d52 100644 (file)
@@ -5368,10 +5368,10 @@ gfc_match_select_type (void)
      array, which can have a reference, from other expressions that
      have references, such as derived type components, and are not
      allowed by the standard.
-     TODO; see is it is sufficient to exclude component and substring
+     TODO: see if it is sufficient to exclude component and substring
      references.  */
   class_array = expr1->expr_type == EXPR_VARIABLE
-                 && expr1->ts.type != BT_UNKNOWN
+                 && expr1->ts.type == BT_CLASS
                  && CLASS_DATA (expr1)
                  && (strcmp (CLASS_DATA (expr1)->name, "_data") == 0)
                  && (CLASS_DATA (expr1)->attr.dimension
index 2a24cbc..163eeab 100644 (file)
@@ -1,3 +1,9 @@
+2012-09-04  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/54243
+       PR fortran/54244
+       * gfortran.dg/select_type_29.f03: New.
+
 2012-09-03  Marc Glisse  <marc.glisse@inria.fr>
 
        * gcc.dg/fold-perm.c: Improve test.
diff --git a/gcc/testsuite/gfortran.dg/select_type_29.f03 b/gcc/testsuite/gfortran.dg/select_type_29.f03
new file mode 100644 (file)
index 0000000..71603e3
--- /dev/null
@@ -0,0 +1,26 @@
+! { dg-do compile }
+!
+! PR 54435: [4.7/4.8 Regression] ICE with SELECT TYPE on a non-CLASS object
+!
+! Contributed by xarthisius
+
+subroutine foo(x)
+  integer :: x
+  select type (x)   ! { dg-error "Selector shall be polymorphic" }
+  end select
+end
+
+
+! PR 54443: [4.7/4.8 Regression] Segmentation Fault when Compiling for code using Fortran Polymorphic Entities
+!
+! Contributed by Mark Beyer <mbeyer@cirrusaircraft.com>
+
+program class_test
+  type hashnode
+    character(4) :: htype
+  end type
+  class(hashnode), pointer :: hp
+
+  select type(hp%htype)   ! { dg-error "is not a named variable" }
+
+end program