extern "C" void Foo (); namespace NMS { extern "C" int V; } template <void (*)()> struct S {}; template <int *> struct T {}; void f (S<Foo>){} // should be _Z1f1SIXadL_Z3FooEEE void g (T<&NMS::V>){} // should be _Z1g1TIXadL_Z1VEEE
Confirmed.
2003-12-15 Nathan Sidwell <nathan@codesourcery.com> PR c++/13241 C++ ABI change. Mangling of symbols in expressions. * mangle.c (write_mangled_name): Add top_level flag. Rework for nested and unnested mangling. Deal with abi version 1 and version 2 differences. (write_expression): Adjust write_mangled_name call. (mangle_decl_string): Use write_mangled_name for all non-type decls.
Subject: Bug 13241 CVSROOT: /cvs/gcc Module name: gcc Changes by: nathan@gcc.gnu.org 2003-12-15 11:57:30 Modified files: gcc/cp : ChangeLog mangle.c gcc/testsuite : ChangeLog Added files: gcc/testsuite/g++.dg/abi: mangle18-1.C mangle18-2.C Log message: cp: PR c++/13241 C++ ABI change. Mangling of symbols in expressions. * mangle.c (write_mangled_name): Add top_level flag. Rework for nested and unnested mangling. Deal with abi version 1 and version 2 differences. (write_expression): Adjust write_mangled_name call. (mangle_decl_string): Use write_mangled_name for all non-type decls. testsuite: PR c++/13241 * g++.dg/abi/mangle18-1.C: New test. * g++.dg/abi/mangle18-2.C: New test. Patches: http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/ChangeLog.diff?cvsroot=gcc&r1=1.3800&r2=1.3801 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/cp/mangle.c.diff?cvsroot=gcc&r1=1.91&r2=1.92 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/ChangeLog.diff?cvsroot=gcc&r1=1.3253&r2=1.3254 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/abi/mangle18-1.C.diff?cvsroot=gcc&r1=NONE&r2=1.1 http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/testsuite/g++.dg/abi/mangle18-2.C.diff?cvsroot=gcc&r1=NONE&r2=1.1
Fixed for 3.4.