[Bug c++/48008] New: [4.6 Regression] libstdc++-v3/testsuite/20_util/function/43397.cc fails to assemble with -fabi-version=5

zsojka at seznam dot cz gcc-bugzilla@gcc.gnu.org
Sun Mar 6 17:31:00 GMT 2011


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48008

           Summary: [4.6 Regression]
                    libstdc++-v3/testsuite/20_util/function/43397.cc fails
                    to assemble with -fabi-version=5
           Product: gcc
           Version: 4.6.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: zsojka@seznam.cz


I am not sure if this is a bug, but as there were commits to the ABI code, and
the release is probably near, I opened this PR without more analysing... I am
sorry if it renders invalid.

This is the compiler output:
$ g++ testcase2.C -std=c++0x -fabi-version=5 -c
/tmp/cclBTCq8.s: Assembler messages:
/tmp/cclBTCq8.s:314: Error: symbol
`_ZSt6mem_fnIFiOiE3FooESt7_Mem_fnIMT0_T_ES6_' is already defined
/tmp/cclBTCq8.s:352: Error: symbol
`_ZSt6mem_fnIFiOiE3FooESt7_Mem_fnIMT0_T_ES6_' is already defined
/tmp/cclBTCq8.s:390: Error: symbol
`_ZSt6mem_fnIFiOiE3FooESt7_Mem_fnIMT0_T_ES6_' is already defined

$ echo _ZSt6mem_fnIFiOiE3FooESt7_Mem_fnIMT0_T_ES6_ | c++filt
std::_Mem_fn<int (Foo::*)(int&&)> std::mem_fn<int ()(int&&), Foo>(int
(Foo::*)(int&&))


With -fabi-version=1 (or gcc 4.5), the following symbols are generated:
$ echo _ZSt6mem_fnIFiOiE3FooESt7_Mem_fnIMT0_T_ES6_ | c++filt
std::_Mem_fn<int (Foo::*)(int&&)> std::mem_fn<int ()(int&&), Foo>(int
(Foo::*)(int&&))
$ echo _ZSt6mem_fnIKFiOiE3FooESt7_Mem_fnIMT0_T_ES7_ | c++filt
std::_Mem_fn<int ( const Foo::*)(int&&)> std::mem_fn<int ( const)(int&&),
Foo>(int ( const Foo::*)(int&&))
$ echo _ZSt6mem_fnIVFiOiE3FooESt7_Mem_fnIMT0_T_ES7_ | c++filt
std::_Mem_fn<int ( volatile Foo::*)(int&&)> std::mem_fn<int ( volatile)(int&&),
Foo>(int ( volatile Foo::*)(int&&))
$ echo _ZSt6mem_fnIVKFiOiE3FooESt7_Mem_fnIMT0_T_ES7_ | c++filt
std::_Mem_fn<int ( const volatile Foo::*)(int&&)> std::mem_fn<int ( const
volatile)(int&&), Foo>(int ( const volatile Foo::*)(int&&))



More information about the Gcc-bugs mailing list