From: <cod...@ho...> - 2004-03-23 12:02:28
|
This may be related to: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12873 I can confirm that it's a bug but it works if I type: $ c++filt MZ4mainE1AKFvvE void (main::A::*)() const The c++filt.exe is from the latest MinGW binutils and is dated newer than the libgcc.a of MinGW GCC 3.3.3 (both share libiberty) so it has apparently been fixed already. If you need it you could build a newer version of libiberty yourself. Luke ----- Original Message ----- Wrom: VRESKPNKMBIPBARHDMNNSKVFVWRKJVZCMHVI To: <min...@li...> Sent: Tuesday, March 23, 2004 3:47 AM Subject: [Mingw-users] bug in abi::__cxa_demangle? > Hello > > I'm just playing around with the various RTTI features of C++ and > probably found a bug in abi::__cxa_demangle. The function can be used to > demangle the "compressed" type information returned by gcc's > implementation of typeid::name(). Unfortunetaly it doesn't seem to work > with pointers to const member functions. In these cases the demangler > returns with error code -2 ("ivalid name under the C++ ABI mangling > rules"). The following code shows the error in conjunction with FuncType2. > > Is this a known bug or a feature of __cxa_demangle? > > Martin > > > > > #include <iostream> > #include <typeinfo> > #include <string> > #include <cxxabi.h> > > using namespace std; > > string demangle (const char *str) { > int status; > char *tmp = abi::__cxa_demangle(str, 0, 0, &status); > string res; > if (status == 0) { > res = tmp; > free(tmp); > return res; > } > else switch (status) { > case -1: return "a memory allocation failiure occurred"; > case -2: return "ivalid name under the C++ ABI mangling rules"; > case -3: return "invalid argument(s)"; > } > } > > > class A; > > int main () { > class A; > typedef void (A::*FuncType1)(); > typedef void (A::*FuncType2)() const; > > cout << typeid(FuncType1).name() > << demangle(typeid(FuncType1).name()) << endl; > cout << typeid(FuncType2).name() > << demangle(typeid(FuncType2).name()) << endl; > } > |