When using __attribute__((weak)) on a constructor, the produced assembly file contains an extra *INTERNAL* on the constructor declaration line. - Here is my test code: class Test { public: Test() __attribute__((weak)); }; int test() { Test test; } - The compilation output: $ g++ test.cc /tmp/cchKRpYD.s: Assembler messages: /tmp/cchKRpYD.s:22: Error: junk at end of line, first unrecognized character is `*' - The corresponding asm line 22: .weak _ZN4TestC1Ev *INTERNAL* I have tried this with and it does not work for: - gcc (GCC) 4.3.0 (compiled from sources) - gcc-4.2 (GCC) 4.2.1 (Ubuntu 4.2.1-5ubuntu4) - gcc-4.1 (GCC) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2) It works without problems with: - gcc-3.4 (GCC) 3.4.6 (Ubuntu 3.4.6-6ubuntu2) If I manually remove the '*INTERNAL*' from the asm file, it compiles correctly. I found a similar old bug (6418) from the GCC3.04 version
Even if the code assembled for 3.3.6 or 3.4.x, the weak reference was not being emitted. So this is not a regression really.
Fixed a looong time ago, 4_5-branch is fine. I'm adding the testcase and closing the PR.
Author: paolo Date: Thu Oct 11 14:37:44 2012 New Revision: 192361 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=192361 Log: 2012-10-11 Paolo Carlini <paolo.carlini@oracle.com> PR c++/36107 * g++.dg/ext/weak5.C: New. Added: trunk/gcc/testsuite/g++.dg/ext/weak5.C Modified: trunk/gcc/testsuite/ChangeLog
Done.