зеркало из https://github.com/microsoft/clang-1.git
Make sure mangling doesn't crash in another case. Add some more tests.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91149 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
e7e278bce2
Коммит
6f9f25dfc7
|
@ -548,7 +548,7 @@ void CXXNameMangler::mangleLocalName(const NamedDecl *ND) {
|
|||
mangleFunctionEncoding(cast<FunctionDecl>(ND->getDeclContext()));
|
||||
|
||||
Out << 'E';
|
||||
mangleSourceName(ND->getIdentifier());
|
||||
mangleUnqualifiedName(ND);
|
||||
}
|
||||
|
||||
void CXXNameMangler::manglePrefix(const DeclContext *DC) {
|
||||
|
|
|
@ -0,0 +1,39 @@
|
|||
// RUN: clang-cc -emit-llvm-only -verify %s
|
||||
|
||||
struct S {
|
||||
virtual ~S() { }
|
||||
};
|
||||
|
||||
// PR5706
|
||||
// Make sure this doesn't crash; the mangling doesn't matter because the name
|
||||
// doesn't have linkage.
|
||||
static struct : S { } obj8;
|
||||
|
||||
void f() {
|
||||
// Make sure this doesn't crash; the mangling doesn't matter because the
|
||||
// generated vtable/etc. aren't modifiable (although it would be nice for
|
||||
// codesize to make it consistent inside inline functions).
|
||||
static struct : S { } obj8;
|
||||
}
|
||||
|
||||
inline int f2() {
|
||||
// FIXME: We don't mangle the names of a or x correctly!
|
||||
static struct { int a() { static int x; return ++x; } } obj;
|
||||
return obj.a();
|
||||
}
|
||||
|
||||
int f3() { return f2(); }
|
||||
|
||||
struct A {
|
||||
typedef struct { int x; } *ptr;
|
||||
ptr m;
|
||||
int a() {
|
||||
static struct x {
|
||||
// FIXME: We don't mangle the names of a or x correctly!
|
||||
int a(ptr A::*memp) { static int x; return ++x; }
|
||||
} a;
|
||||
return a.a(&A::m);
|
||||
}
|
||||
};
|
||||
|
||||
int f4() { return A().a(); }
|
|
@ -228,11 +228,3 @@ template<typename T> typename __enable_if<(__is_scalar<T>::__value), void>::__ty
|
|||
template void ft8<int>();
|
||||
// CHECK: @_Z3ft8IPvEN11__enable_ifIXsr11__is_scalarIT_E7__valueEvE6__typeEv
|
||||
template void ft8<void*>();
|
||||
|
||||
// PR5706
|
||||
// This example was crashing in the mangler code
|
||||
struct S8 {
|
||||
virtual ~S8() { }
|
||||
};
|
||||
|
||||
static struct : S8 { } obj8;
|
||||
|
|
Загрузка…
Ссылка в новой задаче