From 7e1e8a0ae14583dced3eff91e9fc2a6c783e27de Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Tue, 9 Feb 2016 08:35:22 +0000 Subject: [PATCH] re PR middle-end/69715 (ICE: in store_bit_field_1, at expmed.c:839) 2016-02-09 Richard Biener PR tree-optimization/69715 * tree-ssa.c (execute_update_addresses_taken): Mark non-decl LHS on calls as non-rewritable. * gcc.dg/torture/pr69715.c: New testcase. From-SVN: r233239 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/torture/pr69715.c | 11 +++++++++++ gcc/tree-ssa.c | 3 ++- 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/torture/pr69715.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8006790a0f8..27272446b68 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-02-09 Richard Biener + + PR tree-optimization/69715 + * tree-ssa.c (execute_update_addresses_taken): Mark non-decl + LHS on calls as non-rewritable. + 2016-02-09 Tom de Vries PR lto/69707 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 700ba0e28c4..b5146996bf3 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-02-09 Richard Biener + + PR tree-optimization/69715 + * gcc.dg/torture/pr69715.c: New testcase. + 2016-02-08 Patrick Palka PR c++/69139 diff --git a/gcc/testsuite/gcc.dg/torture/pr69715.c b/gcc/testsuite/gcc.dg/torture/pr69715.c new file mode 100644 index 00000000000..cecc82cdf58 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr69715.c @@ -0,0 +1,11 @@ +/* { dg-do compile } */ + +struct __attribute__((may_alias)) S { long long low; int high; }; +struct S foo (void); +long double +bar (void) +{ + long double a; + *(struct S *)&a = foo (); + return a; +} diff --git a/gcc/tree-ssa.c b/gcc/tree-ssa.c index adba2d81870..6a16d268e69 100644 --- a/gcc/tree-ssa.c +++ b/gcc/tree-ssa.c @@ -1436,7 +1436,8 @@ execute_update_addresses_taken (void) tree lhs = gimple_get_lhs (stmt); if (lhs && TREE_CODE (lhs) != SSA_NAME - && non_rewritable_lvalue_p (lhs)) + && ((code == GIMPLE_CALL && ! DECL_P (lhs)) + || non_rewritable_lvalue_p (lhs))) { decl = get_base_address (lhs); if (DECL_P (decl)) -- 2.30.2