This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/16240] [3.4/3.5 ABI Regression] g++ generates incorrect mangled name
- From: "uttamp at us dot ibm dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 29 Jul 2005 18:16:14 -0000
- Subject: [Bug c++/16240] [3.4/3.5 ABI Regression] g++ generates incorrect mangled name
- References: <20040628024250.16240.mckelvey@maskull.com>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From uttamp at us dot ibm dot com 2005-07-29 18:16 -------
I belive, till g++ 3.3.4, the mangled string used have that '_' as hown by
following example,
template<class T> struct S {
S(int i=0);
};
template<S<int> &s> void f13();
extern S<int> s13;
int main(void)
{
f13<s13>();
return 0;
}
With nm, I get
U __gxx_personality_v0
00000000 T main
U _Z3f13IXL_Z3s13EEEvv
Which I believe is the default and correct behavior. But with g++ > 3.4 (which
doesn't support abi-version=3) by default produces mangled string as
U __gxx_personality_v0
00000000 T main
U _Z3f13ILZ3s13EEvv
And with g++ > 3.5.x user has to specify -fabi-version=3 as specified by Mark,
to get the correct string.
So there is a binary compatibility problem between object code created by older
g++ version < 3.3.4 and later version till g++ version 3.5.
Do you see my dilemma? Or am I still missing something very basic here?
Sorry for any/all repetition over this subject. I would really appreciate the
reply for better understanding and clarification of this issue.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=16240