re PR c++/42870 (__attribute__ ((dllexport)) produces broken linkage)
authorJason Merrill <jason@redhat.com>
Fri, 5 Feb 2010 22:17:09 +0000 (17:17 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Fri, 5 Feb 2010 22:17:09 +0000 (17:17 -0500)
PR c++/42870
* config/i386/cygming.h (ASM_OUTPUT_DEF_FROM_DECLS): Call
i386_pe_maybe_record_exported_symbol.

From-SVN: r156529

gcc/ChangeLog
gcc/config/i386/cygming.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/ext/dllexport3.C [new file with mode: 0644]

index be49d980c1534ce5b232d49cbdfc04650cb43094..c9709125689165f3801313d400ab7cf91925e3a2 100644 (file)
@@ -1,3 +1,9 @@
+2010-02-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/42870
+       * config/i386/cygming.h (ASM_OUTPUT_DEF_FROM_DECLS): Call
+       i386_pe_maybe_record_exported_symbol.
+
 2010-02-05  Steve Ellcey  <sje@cup.hp.com>
 
        PR target/42924
index ddec95a36fcd40a21bc017f8d7ecff0823235754..54a61d7a1bcc0bd14509f185419da15b876eebd4 100644 (file)
@@ -361,6 +361,7 @@ do {                                                \
     {                                                                  \
       const char *alias                                                        \
        = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL));              \
+      i386_pe_maybe_record_exported_symbol (DECL, alias, 0);           \
       if (TREE_CODE (DECL) == FUNCTION_DECL)                           \
        i386_pe_declare_function_type (STREAM, alias,                   \
                                       TREE_PUBLIC (DECL));             \
index fdb749509de509581cbb9693d0fda627f4477596..f7a43f55f6adc70ca5a3802541203f4d59a28416 100644 (file)
@@ -1,3 +1,8 @@
+2010-02-03  Jason Merrill  <jason@redhat.com>
+
+       PR c++/42870
+       * g++.dg/ext/dllexport3.C: New.
+
 2010-02-05  Ozkan Sezer  <sezeroz@gmail.com>
 
        * gcc.dg/format/ms-format3.c: New test for specific MS types.
diff --git a/gcc/testsuite/g++.dg/ext/dllexport3.C b/gcc/testsuite/g++.dg/ext/dllexport3.C
new file mode 100644 (file)
index 0000000..a47a5e0
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/42870
+// { dg-do compile { target i?86-*-cygwin *-*-mingw* } }
+// { dg-final { scan-assembler "-export:_ZN2SaD1Ev" } }
+
+#define ATTRIBUTE __attribute__ ((dllexport))
+class ATTRIBUTE Sa {
+ public:
+  Sa()
+    {}
+  ~Sa();
+};
+ATTRIBUTE Sa::~Sa()
+{return;}
+
+bool DllMain(void *a,void*b,int)
+{
+  Sa s;
+  return true;
+}