You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.7 KiB
75 lines
2.7 KiB
2 years ago
|
#include <gtest/gtest.h>
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
|
||
|
extern "C" {
|
||
|
|
||
|
extern char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
|
||
|
int *status);
|
||
|
|
||
|
}
|
||
|
|
||
|
const char* names[] = {
|
||
|
"_Z3fo5n",
|
||
|
"_Z3fo5o",
|
||
|
"_ZN1f1fE",
|
||
|
"_Z1fv",
|
||
|
"_Z1fi",
|
||
|
"_Z3foo3bar",
|
||
|
"_Zrm1XS_",
|
||
|
"_ZplR1XS0_",
|
||
|
"_ZlsRK1XS1_",
|
||
|
"_ZN3FooIA4_iE3barE",
|
||
|
"_Z1fIiEvi",
|
||
|
"_Z5firstI3DuoEvS0_",
|
||
|
"_Z5firstI3DuoEvT_",
|
||
|
"_Z3fooIiFvdEiEvv",
|
||
|
"_Z1fIFvvEEvv",
|
||
|
"_ZN1N1fE",
|
||
|
"_ZN6System5Sound4beepEv",
|
||
|
"_ZN6SkPath4IterC1ERKS_b",
|
||
|
"_ZN6SkPath4Iter4nextEP7SkPoint",
|
||
|
"_ZN6SkScan8HairLineERK7SkPointS2_PK8SkRegionP9SkBlitter",
|
||
|
"_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_",
|
||
|
"_Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE",
|
||
|
"_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct",
|
||
|
"_Z7ZipWithI7QStringS0_5QListZN4oral6detail16AdaptCreateTableI7AccountEES0_RKNS3_16CachedFieldsDataEEUlRKS0_SA_E_ET1_IDTclfp1_cvT__EcvT0__EEEERKT1_ISC_ERKT1_ISD_ET2_",
|
||
|
NULL};
|
||
|
|
||
|
const char* expected[] = {
|
||
|
"fo5(__int128)",
|
||
|
"fo5(unsigned __int128)",
|
||
|
"f::f",
|
||
|
"f()",
|
||
|
"f(int)",
|
||
|
"foo(bar)",
|
||
|
"operator%(X, X)",
|
||
|
"operator+(X&, X&)",
|
||
|
"operator<<(X const&, X const&)",
|
||
|
"Foo<int [4]>::bar",
|
||
|
"void f<int>(int)",
|
||
|
"void first<Duo>(Duo)",
|
||
|
"void first<Duo>(Duo)",
|
||
|
"void foo<int, void (double), int>()",
|
||
|
"void f<void ()>()",
|
||
|
"N::f",
|
||
|
"System::Sound::beep()",
|
||
|
"SkPath::Iter::Iter(SkPath const&, bool)",
|
||
|
"SkPath::Iter::next(SkPoint*)",
|
||
|
"SkScan::HairLine(SkPoint const&, SkPoint const&, SkRegion const*, SkBlitter*)",
|
||
|
"foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************)",
|
||
|
"void f<1, (char)120>(A<(1)+((int)((double)[810000000000000000703DAD7A370C5]))>)",
|
||
|
"myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)",
|
||
|
"QList<decltype ({parm#3}((QString)(), (QString)()))> ZipWith<QString, QString, QList, QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}>(QList<QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1}> const&, QList<QList> const&, QString oral::detail::AdaptCreateTable<Account>(oral::detail::CachedFieldsData const&)::{lambda(QString const&, QString const&)#1})",
|
||
|
""
|
||
|
};
|
||
|
|
||
|
TEST(gcc_demangle, smoke) {
|
||
|
for (int i = 0; names[i] != NULL; ++i) {
|
||
|
char *demangled = __cxa_demangle(names[i], 0, 0, 0);
|
||
|
ASSERT_STREQ(expected[i], demangled);
|
||
|
free(demangled);
|
||
|
}
|
||
|
}
|