aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2012-09-25 15:06:17 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2012-09-25 15:06:17 +0000
commit7e17f52deb5298099210aee7f5e2bdc3fc333c5e (patch)
treec1268baf0d7ee1643db24c4b9a6fa78918fc172a /gcc
parent5677bc1fe96a31d293fbea713456b0bcbc581eeb (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/lto-symtab.c3
-rw-r--r--gcc/testsuite/ChangeLog10
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54625-1_0.c10
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54625-1_1.C19
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54625-2_0.c9
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54625-2_1.C24
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54702_0.c10
-rw-r--r--gcc/testsuite/gcc.dg/lto/pr54702_1.c16
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;
+}
+