From: Jerry DeLisle Date: Sat, 16 Jul 2016 06:06:45 +0000 (+0000) Subject: backport: re PR fortran/71764 (ICE in gfc_trans_structure_assign) X-Git-Tag: releases/gcc-4.9.4~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ab98ff13bd60ab94dc093975bbaecc1f1b591589;p=thirdparty%2Fgcc.git backport: re PR fortran/71764 (ICE in gfc_trans_structure_assign) 2016-07-15 Jerry DeLisle Backport from trunk: PR fortran/71764 * trans-expr.c (gfc_trans_structure_assign): Remove assert. * gfortran.dg/pr71764.f90: New test. From-SVN: r238412 --- diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index d1f479ba24a2..2b6bdcca23c0 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2016-07-15 Jerry DeLisle + + Backport from trunk: + PR fortran/71764 + * trans-expr.c (gfc_trans_structure_assign): Remove assert. + 2016-07-07 Jakub Jelinek Backported from mainline diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index 54ab8960e409..a2857551c820 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 38717717b77f..7619157ab8c8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-07-15 Jerry DeLisle + + Backport from trunk: + PR fortran/71764 + * gfortran.dg/pr71764.f90: New test. + 2016-07-08 Martin Liska Backported from mainline diff --git a/gcc/testsuite/gfortran.dg/pr71764.f90 b/gcc/testsuite/gfortran.dg/pr71764.f90 new file mode 100644 index 000000000000..48176f8297e4 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr71764.f90 @@ -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 +