diff --git a/gcc/ChangeLog b/gcc/ChangeLog index a8d1591dd487a25bead18cd1182668ab0d21fe58..2af2c32edd65891f1140dea9dc609ab80451799f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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 diff --git a/gcc/builtins.c b/gcc/builtins.c index 5b7b673f90ed2ab85cee5a98c9014bd008b1fd48..106b2ca10b0ae23308c1c18252bfd95cc46b9c36 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c2d6ef4fed690c5ac8d86160d1c960dfe607f046..4040f63e79a549ef7240aa9588665e67a720d062 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000000000000000000000000000000000000..f5d335572ee5a2ff0c73ba30166ea0d13b9fb0ee --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/20110201-1_0.c @@ -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; }