Commit 1a1d0917 by Mike Stump Committed by Mike Stump

re PR target/25908 (vtables with vague linkage is not being marked as vague on darwin)

	PR darwin/25908
	* decl2.c (import_export_decl): Fix ABI breakage on darwin.

	* g++.dg/abi/key2.C: Add.

From-SVN: r111632
parent 011daa76
2006-03-01 Mike Stump <mrs@apple.com>
PR darwin/25908
* decl2.c (import_export_decl): Fix ABI breakage on darwin.
2006-02-24 Geoffrey Keating <geoffk@apple.com>
* except.c (expand_start_catch_block): Handle
......
......@@ -1784,9 +1784,14 @@ import_export_decl (tree decl)
/* The generic C++ ABI says that class data is always
COMDAT, even if there is a key function. Some
variants (e.g., the ARM EABI) says that class data
only has COMDAT linkage if the class data might
be emitted in more than one translation unit. */
only has COMDAT linkage if the class data might be
emitted in more than one translation unit. When the
key method can be inline and is inline, we still have
to arrange for comdat even though
class_data_always_comdat is false. */
if (!CLASSTYPE_KEY_METHOD (class_type)
|| (DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (class_type))
&& targetm.cxx.key_method_may_be_inline ())
|| targetm.cxx.class_data_always_comdat ())
{
/* The ABI requires COMDAT linkage. Normally, we
......@@ -1825,7 +1830,10 @@ import_export_decl (tree decl)
if (CLASSTYPE_INTERFACE_KNOWN (type)
&& !CLASSTYPE_INTERFACE_ONLY (type))
{
comdat_p = targetm.cxx.class_data_always_comdat ();
comdat_p = (targetm.cxx.class_data_always_comdat ()
|| (CLASSTYPE_KEY_METHOD (type)
&& DECL_DECLARED_INLINE_P (CLASSTYPE_KEY_METHOD (type))
&& targetm.cxx.key_method_may_be_inline ()));
mark_needed (decl);
if (!flag_weak)
{
......
2006-03-01 Mike Stump <mrs@apple.com>
* g++.dg/abi/key2.C: Add.
2006-03-01 Paul Thomas <pault@gcc.gnu.org>
* gfortran.dg/logical_dot_product.f90: New test.
// On Darwin, key methods that are inline result in comdat style things. */
// PR darwin/25908
// { dg-do compile { target *-*-darwin* } }
// { dg-final { scan-assembler ".globl __ZTV1f\\n .weak_definition __ZTV1f\\n .section __DATA,__const_coal,coalesced" } }
// { dg-final { scan-assembler ".globl __ZTS1f\\n .weak_definition __ZTS1f\\n .section __TEXT,__const_coal,coalesced" } }
// { dg-final { scan-assembler ".globl __ZTI1f\\n .weak_definition __ZTI1f\\n .section __DATA,__const_coal,coalesced" } }
class f
{
virtual void g();
virtual void h();
} c;
inline void f::g() {}
int sub(void)
{}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment