re PR fortran/84385 ([F03] Reject invalid SELECT TYPE selector (allocate_with_source_...
authorJanus Weil <janus@gcc.gnu.org>
Wed, 14 Feb 2018 21:46:59 +0000 (22:46 +0100)
committerJanus Weil <janus@gcc.gnu.org>
Wed, 14 Feb 2018 21:46:59 +0000 (22:46 +0100)
2018-02-14  Janus Weil  <janus@gcc.gnu.org>

PR fortran/84385
* match.c (gfc_match_select_type): Fix check for selector in
SELECT TYPE statement.

2018-02-14  Janus Weil  <janus@gcc.gnu.org>

PR fortran/84385
* gfortran.dg/allocate_with_source_22.f03: Fix invalid test case.
* gfortran.dg/allocate_with_source_23.f90: Ditto.
* gfortran.dg/select_type_1.f03: Extend test case.

From-SVN: r257673

gcc/fortran/ChangeLog
gcc/fortran/match.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/allocate_with_source_22.f03
gcc/testsuite/gfortran.dg/allocate_with_source_23.f03
gcc/testsuite/gfortran.dg/select_type_1.f03

index 01e2a906443f1568d8fb084987f685f439082f5c..ed91bf79b52ea22068f56171ffe9217cf246e1c0 100644 (file)
@@ -1,3 +1,9 @@
+2018-02-14  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/84385
+       * match.c (gfc_match_select_type): Fix check for selector in
+       SELECT TYPE statement.
+
 2018-02-13  Janus Weil  <janus@gcc.gnu.org>
 
        PR fortran/84313
index 9313f435ffb93686658ba1e6170a26fd827e9b35..8f3a027c209d9571401b5076d71a616e932ce051 100644 (file)
@@ -6201,9 +6201,10 @@ gfc_match_select_type (void)
                     || CLASS_DATA (expr1)->attr.codimension)
                 && expr1->ref
                 && expr1->ref->type == REF_ARRAY
+                && expr1->ref->u.ar.type == AR_FULL
                 && expr1->ref->next == NULL);
 
-  /* Check for F03:C811.  */
+  /* Check for F03:C811 (F08:C835).  */
   if (!expr2 && (expr1->expr_type != EXPR_VARIABLE
                 || (!class_array && expr1->ref != NULL)))
     {
index c7df80c57e9ff1eb4916c3d7abdb996472e3b715..e3d1cec40f162aa8f282381d14000a0decf6ae85 100644 (file)
@@ -1,3 +1,10 @@
+2018-02-14  Janus Weil  <janus@gcc.gnu.org>
+
+       PR fortran/84385
+       * gfortran.dg/allocate_with_source_22.f03: Fix invalid test case.
+       * gfortran.dg/allocate_with_source_23.f90: Ditto.
+       * gfortran.dg/select_type_1.f03: Extend test case.
+
 2017-02-14  Uros Bizjak  <ubizjak@gmail.com>
 
        * gcc.target/i386/pr57193.c (dg-do): Remove target selector.
index b8689f95a54e5161028a12b220ed049e7b84930f..babda71a3254c66a87096705db38a9f9f77d853f 100644 (file)
@@ -27,7 +27,7 @@ subroutine test_class()
   ! with -fcheck=bounds.
   if (size(b) /= 4) call abort()
   if (any(b(1:2)%i /= [ 1,2])) call abort()
-  select type (b(1))
+  select type (b1 => b(1))
     class is (tt)
       continue
     class default
index cfe8bd80e2fb12264b2b3c8f9e618e6d34fd7fbc..51ea0c627a457c4e676c01b70c01ce2937970f76 100644 (file)
@@ -28,7 +28,7 @@ subroutine test_class_correct()
   allocate(b(1:4), source=a(1))
   if (size(b) /= 4) call abort()
   if (any(b(:)%i /= [ 1,1,1,1])) call abort()
-  select type (b(1))
+  select type (b1 => b(1))
     class is (tt)
       continue
     class default
@@ -46,7 +46,7 @@ subroutine test_class_fail()
   allocate(b(1:4), source=a) ! Fail expected: sizes do not conform
   if (size(b) /= 4) call abort()
   if (any(b(1:2)%i /= [ 1,2])) call abort()
-  select type (b(1))
+  select type (b1 => b(1))
     class is (tt)
       continue
     class default
index b92366db704629160785e964a673e0a0a086cae3..695f75661b87b1cfe3d8cd555b54f3217b35a4fc 100644 (file)
@@ -23,6 +23,7 @@
   end type
 
   class(t1), pointer :: a => NULL()
+  class(t1), allocatable, dimension(:) :: ca
   type(t1), target :: b
   type(t2), target :: c
   a => b
@@ -32,6 +33,7 @@
 
   select type (3.5)  ! { dg-error "is not a named variable" }
   select type (a%cp) ! { dg-error "is not a named variable" }
+  select type (ca(1))! { dg-error "is not a named variable" }
   select type (b)    ! { dg-error "Selector shall be polymorphic" }
   end select