blob: bc514b4e0c6078fe252f13fed053d2f3e5fe270f [file] [log] [blame]
; RUN: llvm-undname < %s | FileCheck %s
; CHECK-NOT: Invalid mangled name
; CHECK: int x
; CHECK: int *x
; CHECK: int **x
; CHECK: unsigned long foo[3][4]
; CHECK: int (*x)[3]
; CHECK: int (*x)[3][5]
; CHECK: int const (*x)[3]
; CHECK: unsigned char *x
; CHECK: unsigned short *y
; CHECK: unsigned long *z
; CHECK: int (*x)[3500][6]
; CHECK: void __cdecl x(float, int)
; CHECK: void __cdecl x(float, int, ...)
; CHECK: void __cdecl x(...)
; CHECK: int (__cdecl *x)(float, double, int)
; CHECK: int (__cdecl *x)(int (__cdecl *)(float), double)
; CHECK: int (__cdecl *x)(int (__cdecl *)(float), int (__cdecl *)(float))
; CHECK: int ns::x
; Microsoft's undname doesn't handle Q correctly or the multiple occurrences
; of the const modifier. So the results here differ, but ours are correct.
; CHECK: int *x
; CHECK: int const *x
; CHECK: int *const x
; CHECK: int const *const x
; CHECK: int const &x
; CHECK: struct ty *x
; CHECK: union ty *x
; CHECK: class ty *x
; CHECK: enum ty *x
; CHECK: class tmpl<int> *x
; CHECK: struct tmpl<int> *x
; CHECK: union tmpl<int> *x
; CHECK: class klass instance
; CHECK: void (__cdecl *instance$initializer$)(void)
; CHECK: __cdecl klass::klass(void)
; CHECK: __cdecl klass::~klass(void)
; CHECK: int __cdecl x(class klass *, class klass &)
; CHECK: class ns::klass<int, int> *ns::x
; CHECK: unsigned int __cdecl ns::klass<int>::fn(void) const
; CHECK: class klass const & __cdecl klass::operator=(class klass const &)
; CHECK: bool __cdecl klass::operator!(void)
; CHECK: bool __cdecl klass::operator==(class klass const &)
; CHECK: bool __cdecl klass::operator!=(class klass const &)
; CHECK: int __cdecl klass::operator[](unsigned __int64)
; CHECK: int __cdecl klass::operator->(void)
; CHECK: int __cdecl klass::operator*(void)
; CHECK: int __cdecl klass::operator++(void)
; CHECK: int __cdecl klass::operator++(int)
; CHECK: int __cdecl klass::operator--(void)
; CHECK: int __cdecl klass::operator--(int)
; CHECK: int __cdecl klass::operator+(int)
; CHECK: int __cdecl klass::operator-(int)
; CHECK: int __cdecl klass::operator&(int)
; CHECK: int __cdecl klass::operator->*(int)
; CHECK: int __cdecl klass::operator/(int)
; CHECK: int __cdecl klass::operator<(int)
; CHECK: int __cdecl klass::operator<=(int)
; CHECK: int __cdecl klass::operator>(int)
; CHECK: int __cdecl klass::operator>=(int)
; CHECK: int __cdecl klass::operator,(int)
; CHECK: int __cdecl klass::operator()(int)
; CHECK: int __cdecl klass::operator~(void)
; CHECK: int __cdecl klass::operator^(int)
; CHECK: int __cdecl klass::operator|(int)
; CHECK: int __cdecl klass::operator&&(int)
; CHECK: int __cdecl klass::operator||(int)
; CHECK: int __cdecl klass::operator*=(int)
; CHECK: int __cdecl klass::operator+=(int)
; CHECK: int __cdecl klass::operator-=(int)
; CHECK: int __cdecl klass::operator/=(int)
; CHECK: int __cdecl klass::operator%=(int)
; CHECK: int __cdecl klass::operator>>=(int)
; CHECK: int __cdecl klass::operator<<=(int)
; CHECK: int __cdecl klass::operator^=(int)
; CHECK: class klass const & __cdecl operator<<(class klass const &, int)
; CHECK: class klass const & __cdecl operator>>(class klass const &, unsigned __int64)
; CHECK: void * __cdecl operator new(unsigned __int64, class klass &)
; CHECK: void * __cdecl operator new[](unsigned __int64, class klass &)
; CHECK: void __cdecl operator delete(void *, class klass &)
; CHECK: void __cdecl operator delete[](void *, class klass &)
; CHECK: class B const `anonymous namespace'::A