]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR fortran/71764 (ICE in gfc_trans_structure_assign)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 16 Jul 2016 06:06:45 +0000 (06:06 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sat, 16 Jul 2016 06:06:45 +0000 (06:06 +0000)
2016-07-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

Backport from trunk:
PR fortran/71764
* trans-expr.c (gfc_trans_structure_assign): Remove assert.

* gfortran.dg/pr71764.f90: New test.

From-SVN: r238412

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

index d1f479ba24a29a6f10af68675bb2d650855195a2..2b6bdcca23c07c1a77327e7fb1e5cbd0c2ba431f 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71764
+       * trans-expr.c (gfc_trans_structure_assign): Remove assert.
+
 2016-07-07  Jakub Jelinek  <jakub@redhat.com>
 
        Backported from mainline
index 54ab8960e409f591ff39cf3b40c0755098c26c11..a2857551c820a2299a98852a65ce1db36f13fd48 100644 (file)
@@ -6184,7 +6184,6 @@ gfc_trans_structure_assign (tree dest, gfc_expr * expr)
     {
       gfc_se se, lse;
 
-      gcc_assert (cm->backend_decl == NULL);
       gfc_init_se (&se, NULL);
       gfc_init_se (&lse, NULL);
       gfc_conv_expr (&se, gfc_constructor_first (expr->value.constructor)->expr);
index 38717717b77f4c97fd73b4b0f147cb211c40a73e..7619157ab8c834651a9530e7e28af6f72ece1b81 100644 (file)
@@ -1,3 +1,9 @@
+2016-07-15  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       Backport from trunk:
+       PR fortran/71764
+       * gfortran.dg/pr71764.f90: New test.
+
 2016-07-08  Martin Liska  <mliska@suse.cz>
 
        Backported from mainline
diff --git a/gcc/testsuite/gfortran.dg/pr71764.f90 b/gcc/testsuite/gfortran.dg/pr71764.f90
new file mode 100644 (file)
index 0000000..48176f8
--- /dev/null
@@ -0,0 +1,34 @@
+! { dg-do run }
+! PR71764 
+program p
+   use iso_c_binding, only: c_ptr, c_null_ptr, c_ptr, c_associated, c_loc
+   logical, target :: rls
+   real, target :: t = 3.14
+   type(c_ptr) :: nullptr,c
+   real, pointer :: k
+   nullptr = c_null_ptr
+   c = nullptr
+   rls = c_associated(c)
+   if (rls) call abort
+   if (c_associated(c)) call abort
+   c = c_loc(rls)
+   if (.not. c_associated(c)) call abort
+   c = nullptr
+   if (c_associated(c)) call abort
+   c = c_loc(t)
+   k => t
+   call association_test(k, c)
+contains
+  subroutine association_test(a,b)
+    use iso_c_binding, only: c_associated, c_loc, c_ptr
+    implicit none
+    real, pointer :: a
+    type(c_ptr) :: b
+    if(c_associated(b, c_loc(a))) then
+       return
+    else
+       call abort
+    end if
+  end subroutine association_test
+end
+