Comments
Patch
===================================================================
@@ -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);
+}
+
===================================================================
@@ -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);
+}
===================================================================
@@ -0,0 +1,9 @@
+/* { dg-lto-do link } */
+/* { dg-extra-ld-options { -r -nostdlib } } */
+
+float a;
+double sin ();
+update_filter ()
+{
+ a = sin (0);
+}
===================================================================
@@ -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);
+}
===================================================================
@@ -629,7 +629,8 @@ lto_symtab_merge_cgraph_nodes_1 (symtab_
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));