Hi!

Honza has acked this patch on IRC, so I've committed it to trunk after
bootstrap/regtest on x86_64-linux and i686-linux.

2014-04-10  Jan Hubicka  <hubi...@ucw.cz>
            Jakub Jelinek  <ja...@redhat.com>

        PR lto/60567
        * ipa.c (function_and_variable_visibility): Copy forced_by_abi flag from
        decl_node to node.

        * g++.dg/lto/pr60567_0.C: New test.

--- gcc/ipa.c.jj        2014-04-10 12:17:06.000000000 +0200
+++ gcc/ipa.c   2014-04-10 16:27:41.546991476 +0200
@@ -1032,6 +1032,7 @@ function_and_variable_visibility (bool w
                                   == DECL_COMDAT_GROUP (decl_node->decl));
              gcc_checking_assert (node->same_comdat_group);
            }
+         node->forced_by_abi = decl_node->forced_by_abi;
          if (DECL_EXTERNAL (decl_node->decl))
            DECL_EXTERNAL (node->decl) = 1;
        }
--- gcc/testsuite/g++.dg/lto/pr60567_0.C.jj     2014-04-10 12:04:07.227797680 
+0200
+++ gcc/testsuite/g++.dg/lto/pr60567_0.C        2014-04-10 12:06:18.063099605 
+0200
@@ -0,0 +1,23 @@
+// PR lto/60567
+// { dg-lto-do link }
+// { dg-lto-options { { -flto -fno-use-linker-plugin } } }
+// { dg-extra-ld-options "-r -nostdlib" }
+
+#pragma implementation
+struct S {};
+
+#pragma interface
+struct T
+{
+  virtual void foo (const S &) = 0;
+};
+
+struct U
+{
+  virtual void bar (const S &) = 0;
+};
+
+struct V : public T, public U
+{
+  virtual void bar (const S &) {}
+};

        Jakub

Reply via email to