re PR middle-end/47566 (ICE in vn_reference_lookup)
authorRichard Guenther <rguenther@suse.de>
Wed, 2 Feb 2011 09:59:23 +0000 (09:59 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Wed, 2 Feb 2011 09:59:23 +0000 (09:59 +0000)
2011-02-02  Richard Guenther  <rguenther@suse.de>

PR tree-optimization/47566
* builtins.c (builtin_save_expr): No SAVE_EXPR for SSA_NAMEs.

* gcc.dg/lto/20110201-1_0.c: New testcase.

From-SVN: r169518

gcc/ChangeLog
gcc/builtins.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lto/20110201-1_0.c [new file with mode: 0644]

index a8d1591dd487a25bead18cd1182668ab0d21fe58..2af2c32edd65891f1140dea9dc609ab80451799f 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/47566
+       * builtins.c (builtin_save_expr): No SAVE_EXPR for SSA_NAMEs.
+
 2011-02-02  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/47106
index 5b7b673f90ed2ab85cee5a98c9014bd008b1fd48..106b2ca10b0ae23308c1c18252bfd95cc46b9c36 100644 (file)
@@ -652,9 +652,10 @@ target_char_cast (tree cst, char *p)
 static tree
 builtin_save_expr (tree exp)
 {
-  if (TREE_ADDRESSABLE (exp) == 0
-      && (TREE_CODE (exp) == PARM_DECL
-         || (TREE_CODE (exp) == VAR_DECL && !TREE_STATIC (exp))))
+  if (TREE_CODE (exp) == SSA_NAME
+      || (TREE_ADDRESSABLE (exp) == 0
+         && (TREE_CODE (exp) == PARM_DECL
+             || (TREE_CODE (exp) == VAR_DECL && !TREE_STATIC (exp)))))
     return exp;
 
   return save_expr (exp);
index c2d6ef4fed690c5ac8d86160d1c960dfe607f046..4040f63e79a549ef7240aa9588665e67a720d062 100644 (file)
@@ -1,3 +1,8 @@
+2011-02-02  Richard Guenther  <rguenther@suse.de>
+
+       PR tree-optimization/47566
+       * gcc.dg/lto/20110201-1_0.c: New testcase.
+
 2011-02-02  Alexandre Oliva  <aoliva@redhat.com>
 
        PR debug/47498
diff --git a/gcc/testsuite/gcc.dg/lto/20110201-1_0.c b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c
new file mode 100644 (file)
index 0000000..f5d3355
--- /dev/null
@@ -0,0 +1,19 @@
+/* { dg-lto-do run } */
+/* { dg-lto-options { { -O0 -flto } } } */
+/* { dg-extra-ld-options "-O2 -ffast-math -fuse-linker-plugin" } */
+/* { dg-require-linker-plugin "" } */
+
+/* We require a linker plugin because otherwise we'd need to link
+   against libm which we are not sure here has cabs on all targets.
+   This is because collect2 invokes ld on the -O0 object code
+   which does not have folded cabs.  */
+
+double cabs(_Complex double);
+double __attribute__((used))
+foo (_Complex double x, int b)
+{
+  if (b)
+    x = 0;
+  return cabs(x);
+}
+int main() { return 0; }