diff options
author | Richard Guenther <rguenther@suse.de> | 2012-09-25 15:06:17 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-09-25 15:06:17 +0000 |
commit | 7e17f52deb5298099210aee7f5e2bdc3fc333c5e (patch) | |
tree | c1268baf0d7ee1643db24c4b9a6fa78918fc172a /gcc | |
parent | 5677bc1fe96a31d293fbea713456b0bcbc581eeb (diff) | |
download | gcc-7e17f52deb5298099210aee7f5e2bdc3fc333c5e.zip gcc-7e17f52deb5298099210aee7f5e2bdc3fc333c5e.tar.gz gcc-7e17f52deb5298099210aee7f5e2bdc3fc333c5e.tar.bz2 |
re PR lto/54625 (lto/profiledbootstrap broken by r191466: ICE: in cgraph_clone_edge, at cgraphclones.c:123)
2012-09-25 Richard Guenther <rguenther@suse.de>
PR lto/54625
* lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Do not merge
cgraph nodes for builtins.
* gcc.dg/lto/pr54702_0.c: New testcase.
* gcc.dg/lto/pr54702_1.c: Likewise.
* gcc.dg/lto/pr54625-1_0.c: Likewise.
* gcc.dg/lto/pr54625-1_1.C: Likewise.
* gcc.dg/lto/pr54625-2_0.c: Likewise.
* gcc.dg/lto/pr54625-2_1.C: Likewise.
From-SVN: r191713
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/lto-symtab.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54625-1_0.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54625-1_1.C | 19 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54625-2_0.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54625-2_1.C | 24 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54702_0.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/lto/pr54702_1.c | 16 |
9 files changed, 106 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61134bd..75ac7aa 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-25 Richard Guenther <rguenther@suse.de> + + PR lto/54625 + * lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Do not merge + cgraph nodes for builtins. + 2012-09-25 Dehao Chen <dehao@google.com> PR middle-end/54645 diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c index ae73ad4..a8a4657 100644 --- a/gcc/lto-symtab.c +++ b/gcc/lto-symtab.c @@ -629,7 +629,8 @@ lto_symtab_merge_cgraph_nodes_1 (symtab_node prevailing) if (!symtab_real_symbol_p (e)) continue; - if (symtab_function_p (e)) + if (symtab_function_p (e) + && !DECL_BUILT_IN (e->symbol.decl)) lto_cgraph_replace_node (cgraph (e), cgraph (prevailing)); if (symtab_variable_p (e)) lto_varpool_replace_node (varpool (e), varpool (prevailing)); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 41d75a6..4d4162c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2012-09-25 Richard Guenther <rguenther@suse.de> + + PR lto/54625 + * gcc.dg/lto/pr54702_0.c: New testcase. + * gcc.dg/lto/pr54702_1.c: Likewise. + * gcc.dg/lto/pr54625-1_0.c: Likewise. + * gcc.dg/lto/pr54625-1_1.C: Likewise. + * gcc.dg/lto/pr54625-2_0.c: Likewise. + * gcc.dg/lto/pr54625-2_1.C: Likewise. + 2012-09-25 Paolo Carlini <paolo.carlini@oracle.com> PR c++/54526 diff --git a/gcc/testsuite/gcc.dg/lto/pr54625-1_0.c b/gcc/testsuite/gcc.dg/lto/pr54625-1_0.c new file mode 100644 index 0000000..5ab90dd --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54625-1_0.c @@ -0,0 +1,10 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ + +float a; +double sin (); +speex_resampler_init_frac () +{ + a = sin (0); +} + diff --git a/gcc/testsuite/gcc.dg/lto/pr54625-1_1.C b/gcc/testsuite/gcc.dg/lto/pr54625-1_1.C new file mode 100644 index 0000000..2d0d5bf --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54625-1_1.C @@ -0,0 +1,19 @@ +extern "C" double sin (double); +typedef double UnaryFunType (double); +class A +{ +public: + int hash (); + double lookup (UnaryFunType p1) + { + int a = hash (); + if (p1) + return 0; + } +}; +A b; +void +math_sin_impl () +{ + b.lookup (sin); +} diff --git a/gcc/testsuite/gcc.dg/lto/pr54625-2_0.c b/gcc/testsuite/gcc.dg/lto/pr54625-2_0.c new file mode 100644 index 0000000..6511ba5 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54625-2_0.c @@ -0,0 +1,9 @@ +/* { dg-lto-do link } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ + +float a; +double sin (); +update_filter () +{ + a = sin (0); +} diff --git a/gcc/testsuite/gcc.dg/lto/pr54625-2_1.C b/gcc/testsuite/gcc.dg/lto/pr54625-2_1.C new file mode 100644 index 0000000..09c365d --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54625-2_1.C @@ -0,0 +1,24 @@ +extern "C" double sin (double); +typedef double (*UnaryFunType) (double); +class A +{ +public: + int hash (); + void lookup (UnaryFunType p1) + { + int a = hash (); + p1 (0); + } +}; +A b, c; +void +math_sin_impl () +{ + b.lookup (sin); +} + +void +js_math_sqrt () +{ + c.lookup (0); +} diff --git a/gcc/testsuite/gcc.dg/lto/pr54702_0.c b/gcc/testsuite/gcc.dg/lto/pr54702_0.c new file mode 100644 index 0000000..2242f50 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54702_0.c @@ -0,0 +1,10 @@ +/* { dg-lto-do link } */ +/* { dg-lto-options { { -O2 -flto -w } } } */ +/* { dg-extra-ld-options { -r -nostdlib } } */ + +#include <stdlib.h> +void* f () +{ + void* p = malloc (1); + return p; +} diff --git a/gcc/testsuite/gcc.dg/lto/pr54702_1.c b/gcc/testsuite/gcc.dg/lto/pr54702_1.c new file mode 100644 index 0000000..2afb0fb --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/pr54702_1.c @@ -0,0 +1,16 @@ +int *b; +void *d; +int c; +static int *f1 (); +void f2 () +{ + int *a = f1 (0); +} + +int *f1 (j) +{ + b = malloc (0); + d = *malloc; + c = j; +} + |