aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2019-01-08 10:46:04 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2019-01-08 10:46:04 +0000
commiteb4a91451a293020a497e5dc1d41667af8b16eea (patch)
tree13540aebaea57a6ef2d80b80ec6487d5c1e17986 /gcc
parentefac62a3d17d534e8fec39a53031689efb0dc724 (diff)
downloadgcc-eb4a91451a293020a497e5dc1d41667af8b16eea.zip
gcc-eb4a91451a293020a497e5dc1d41667af8b16eea.tar.gz
gcc-eb4a91451a293020a497e5dc1d41667af8b16eea.tar.bz2
re PR fortran/88611 (ICE in eliminate_stmt, at tree-ssa-sccvn.c:5011)
2019-01-08 Richard Biener <rguenther@suse.de> PR fortran/88611 * trans-expr.c (gfc_conv_initializer): For ISOCBINDING_NULL_* directly build the expected GENERIC tree. * gfortran.dg/pr88611.f90: New testcase. From-SVN: r267721
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-expr.c19
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gfortran.dg/pr88611.f9014
4 files changed, 32 insertions, 13 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index ba95a26..73d47da 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2019-01-08 Richard Biener <rguenther@suse.de>
+
+ PR fortran/88611
+ * trans-expr.c (gfc_conv_initializer): For ISOCBINDING_NULL_*
+ directly build the expected GENERIC tree.
+
2019-01-07 Thomas Koenig <tkoenig@gcc.gnu.org>
Harald Anlauf <anlauf@gmx.de>
Tobias Burnus <burnus@gcc.gnu.org>
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c
index 27eb2d2..c45752e 100644
--- a/gcc/fortran/trans-expr.c
+++ b/gcc/fortran/trans-expr.c
@@ -7086,19 +7086,12 @@ gfc_conv_initializer (gfc_expr * expr, gfc_typespec * ts, tree type,
if (expr != NULL && expr->ts.type == BT_DERIVED
&& expr->ts.is_iso_c && expr->ts.u.derived)
{
- gfc_symbol *derived = expr->ts.u.derived;
-
- /* The derived symbol has already been converted to a (void *). Use
- its kind. */
- if (derived->ts.kind == 0)
- derived->ts.kind = gfc_default_integer_kind;
- expr = gfc_get_int_expr (derived->ts.kind, NULL, 0);
- expr->ts.f90_type = derived->ts.f90_type;
-
- gfc_init_se (&se, NULL);
- gfc_conv_constant (&se, expr);
- gcc_assert (TREE_CODE (se.expr) != CONSTRUCTOR);
- return se.expr;
+ if (TREE_CODE (type) == ARRAY_TYPE)
+ return build_constructor (type, NULL);
+ else if (POINTER_TYPE_P (type))
+ return build_int_cst (type, 0);
+ else
+ gcc_unreachable ();
}
if (array && !procptr)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 14a5944..ff3e09d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2019-01-08 Richard Biener <rguenther@suse.de>
+
+ PR fortran/88611
+ * trans-expr.c (gfc_conv_initializer): For ISOCBINDING_NULL_*
+ directly build the expected GENERIC tree.
+
2019-01-08 Sam Tebbs <sam.tebbs@arm.com>
* gcc.target/aarch64/(return_address_sign_1.c,
diff --git a/gcc/testsuite/gfortran.dg/pr88611.f90 b/gcc/testsuite/gfortran.dg/pr88611.f90
new file mode 100644
index 0000000..9847bc3
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr88611.f90
@@ -0,0 +1,14 @@
+! { dg-do run }
+! { dg-options "-fdefault-integer-8 -fno-tree-forwprop -O3 -fno-tree-ccp" }
+! PR 82869
+! A temp variable of type logical was incorrectly transferred
+! to the I/O library as a logical type of a different kind.
+program pr82869_8
+ use, intrinsic :: iso_c_binding
+ type(c_ptr) :: p = c_null_ptr
+ character(len=4) :: s
+ write (s, *) c_associated(p), c_associated(c_null_ptr)
+ if (s /= ' F F') then
+ STOP 1
+ end if
+end program pr82869_8