From 26cfb9ab3d91892d6f6bfde59b6b6010fe467707 Mon Sep 17 00:00:00 2001 From: Kai Tietz Date: Tue, 7 Feb 2012 11:45:59 +0100 Subject: [PATCH] re PR target/40068 (GCC fails to apply dllexport attribute to typeinfo.) 2012-02-07 Kai Tietz Dave Korn PR target/40068 * config/i386/winnt-cxx.c (i386_pe_adjust_class_at_definition): Take care that typinfo gets dllexport-attribute. Co-Authored-By: Dave Korn From-SVN: r183962 --- gcc/ChangeLog | 7 +++++++ gcc/config/i386/winnt-cxx.c | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b3662384cd7..a35ee2c4300 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2012-02-07 Kai Tietz + Dave Korn + + PR target/40068 + * config/i386/winnt-cxx.c (i386_pe_adjust_class_at_definition): + Take care that typinfo gets dllexport-attribute. + 2012-02-07 Jakub Jelinek PR middle-end/52074 diff --git a/gcc/config/i386/winnt-cxx.c b/gcc/config/i386/winnt-cxx.c index 9c552300699..0c47e3a8b58 100644 --- a/gcc/config/i386/winnt-cxx.c +++ b/gcc/config/i386/winnt-cxx.c @@ -97,6 +97,20 @@ i386_pe_adjust_class_at_definition (tree t) if (lookup_attribute ("dllexport", TYPE_ATTRIBUTES (t)) != NULL_TREE) { + tree tmv = TYPE_MAIN_VARIANT (t); + + /* Make sure that we set dllexport attribute to typeinfo's + base declaration, as otherwise it would fail to be exported as + it isn't a class-member. */ + if (tmv != NULL_TREE + && CLASSTYPE_TYPEINFO_VAR (tmv) != NULL_TREE) + { + tree na, ti_decl = CLASSTYPE_TYPEINFO_VAR (tmv); + na = tree_cons (get_identifier ("dllexport"), NULL_TREE, + NULL_TREE); + decl_attributes (&ti_decl, na, 0); + } + /* Check static VAR_DECL's. */ for (member = TYPE_FIELDS (t); member; member = DECL_CHAIN (member)) if (TREE_CODE (member) == VAR_DECL)