From 7e17f52deb5298099210aee7f5e2bdc3fc333c5e Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Tue, 25 Sep 2012 15:06:17 +0000 Subject: [PATCH] re PR lto/54625 (lto/profiledbootstrap broken by r191466: ICE: in cgraph_clone_edge, at cgraphclones.c:123) 2012-09-25 Richard Guenther 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 --- gcc/ChangeLog | 6 ++++++ gcc/lto-symtab.c | 3 ++- gcc/testsuite/ChangeLog | 10 ++++++++++ gcc/testsuite/gcc.dg/lto/pr54625-1_0.c | 10 ++++++++++ gcc/testsuite/gcc.dg/lto/pr54625-1_1.C | 19 +++++++++++++++++++ gcc/testsuite/gcc.dg/lto/pr54625-2_0.c | 9 +++++++++ gcc/testsuite/gcc.dg/lto/pr54625-2_1.C | 24 ++++++++++++++++++++++++ gcc/testsuite/gcc.dg/lto/pr54702_0.c | 10 ++++++++++ gcc/testsuite/gcc.dg/lto/pr54702_1.c | 16 ++++++++++++++++ 9 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.dg/lto/pr54625-1_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr54625-1_1.C create mode 100644 gcc/testsuite/gcc.dg/lto/pr54625-2_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr54625-2_1.C create mode 100644 gcc/testsuite/gcc.dg/lto/pr54702_0.c create mode 100644 gcc/testsuite/gcc.dg/lto/pr54702_1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 61134bdb6b2..75ac7aa7c03 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2012-09-25 Richard Guenther + + PR lto/54625 + * lto-symtab.c (lto_symtab_merge_cgraph_nodes_1): Do not merge + cgraph nodes for builtins. + 2012-09-25 Dehao Chen PR middle-end/54645 diff --git a/gcc/lto-symtab.c b/gcc/lto-symtab.c index ae73ad448fb..a8a46575ba5 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 41d75a68b45..4d4162c8621 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,13 @@ +2012-09-25 Richard Guenther + + 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 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 00000000000..5ab90ddddee --- /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 00000000000..2d0d5bfbadf --- /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 00000000000..6511ba5cc62 --- /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 00000000000..09c365d2354 --- /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 00000000000..2242f50b6de --- /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 +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 00000000000..2afb0fbc063 --- /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; +} +