]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR fortran/90498 (ICE with select type/associate and derived type argument contain...
authorPaul Thomas <pault@gcc.gnu.org>
Sun, 19 May 2019 12:32:55 +0000 (12:32 +0000)
committerPaul Thomas <pault@gcc.gnu.org>
Sun, 19 May 2019 12:32:55 +0000 (12:32 +0000)
2019-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/90498
* trans-stmt.c (trans_associate_var) Do not use the saved
descriptor if the expression is a COMPONENT_REF.

2019-05-19  Paul Thomas  <pault@gcc.gnu.org>

PR fortran/90498
* gfortran.dg/associate_48.f90 : New test.

From-SVN: r271380

gcc/fortran/ChangeLog
gcc/fortran/trans-stmt.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/associate_48.f90 [new file with mode: 0644]

index a8e188c66247d35b9560962764f4e9efbd4d9270..dd54e59de674df00b89a5319cc0c397bfd88a462 100644 (file)
@@ -1,3 +1,9 @@
+2019-05-19  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/90498
+       * trans-stmt.c (trans_associate_var) Do not use the saved
+       descriptor if the expression is a COMPONENT_REF.
+
 2019-05-19  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/90329
index b9966ed93184f41828203ae813b2901641b4b436..5fa182bf05a936116d9b5105954072754c87d891 100644 (file)
@@ -1858,7 +1858,8 @@ trans_associate_var (gfc_symbol *sym, gfc_wrapped_block *block)
            {
              if (e->symtree
                  && DECL_LANG_SPECIFIC (e->symtree->n.sym->backend_decl)
-                && GFC_DECL_SAVED_DESCRIPTOR (e->symtree->n.sym->backend_decl))
+                 && GFC_DECL_SAVED_DESCRIPTOR (e->symtree->n.sym->backend_decl)
+                 && TREE_CODE (target_expr) != COMPONENT_REF)
                /* Use the original class descriptor stored in the saved
                   descriptor to get the target_expr.  */
                target_expr =
index 1352e61c9f427e54f146536bbe6d1a29eef816b1..fe971aa85d313386e63972446f53b0a4b251d1b7 100644 (file)
@@ -1,3 +1,8 @@
+2019-05-19  Paul Thomas  <pault@gcc.gnu.org>
+
+       PR fortran/90498
+       * gfortran.dg/associate_48.f90 : New test.
+
 2019-05-19  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/78290
 
 2019-05-15  Iain Sandoe  <iain@sandoe.co.uk>
 
-       * lib/target-supports.exp 
+       * lib/target-supports.exp
        (check_effective_target_powerpc_p8vector_ok): No support for Darwin.
        (check_effective_target_powerpc_p9vector_ok): Likewise.
        (check_effective_target_powerpc_float128_sw_ok): Likewise.
diff --git a/gcc/testsuite/gfortran.dg/associate_48.f90 b/gcc/testsuite/gfortran.dg/associate_48.f90
new file mode 100644 (file)
index 0000000..5ce3a49
--- /dev/null
@@ -0,0 +1,41 @@
+! { dg=do run }
+!
+! Test the fix for PR90498.
+!
+! Contributed by Vladimir Fuka  <vladimir.fuka@gmail.com>
+!
+  type field_names_a
+    class(*), pointer :: var(:) =>null()
+  end type
+
+  type(field_names_a),pointer :: a(:)
+  allocate (a(2))
+
+  allocate (a(1)%var(2), source = ["hello"," vlad"])
+  allocate (a(2)%var(2), source = ["HELLO"," VLAD"])
+  call s(a)
+  deallocate (a(1)%var)
+  deallocate (a(2)%var)
+  deallocate (a)
+contains
+  subroutine s(a)
+
+    type(field_names_a) :: a(:)
+
+    select type (var => a(1)%var)
+      type is (character(*))
+        if (any (var .ne. ["hello"," vlad"])) stop 1
+      class default
+        stop
+    end select
+
+    associate (var => a(2)%var)
+      select type (var)
+        type is (character(*))
+          if (any (var .ne. ["HELLO"," VLAD"])) stop 2
+        class default
+          stop
+      end select
+    end associate
+  end
+end