aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-02-09 08:35:22 +0000
committerRichard Biener <rguenther@suse.de>2016-02-09 08:35:22 +0000
commitd01a55d4ca403b2a22a79d6e9f1312eb695c2942 (patch)
tree3b351a007623e28b3834cca6e7c18edb98675d38
parent029fbe37a3b8e8bf3ade6caeb42a8632e8550016 (diff)
2016-02-09 Richard Biener <rguenther@suse.de>
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. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@233239 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/torture/pr69715.c11
-rw-r--r--gcc/tree-ssa.c3
4 files changed, 24 insertions, 1 deletions
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 <rguenther@suse.de>
+
+ 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 <tom@codesourcery.com>
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 <rguenther@suse.de>
+
+ PR tree-optimization/69715
+ * gcc.dg/torture/pr69715.c: New testcase.
+
2016-02-08 Patrick Palka <ppalka@gcc.gnu.org>
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))