Don't crash when mangling empty anonymous unions. We never actually *need*

these, but it's convenient to mangle them when deferring them (in the 99.99%
case where it's not an anonymous union, of course).

llvm-svn: 110381
This commit is contained in:
John McCall 2010-08-05 22:02:13 +00:00
parent 638c823211
commit 491462425a
2 changed files with 16 additions and 1 deletions

View File

@ -699,7 +699,11 @@ void CXXNameMangler::mangleUnqualifiedName(const NamedDecl *ND,
// a program to refer to the anonymous union, and there is therefore no
// need to mangle its name.
const FieldDecl *FD = FindFirstNamedDataMember(RD);
assert(FD && "Didn't find a named data member!");
// It's actually possible for various reasons for us to get here
// with an empty anonymous struct / union. Fortunately, it
// doesn't really matter what name we generate.
if (!FD) break;
assert(FD->getIdentifier() && "Data member name isn't an identifier!");
mangleSourceName(FD->getIdentifier());

View File

@ -529,3 +529,14 @@ namespace test15 {
// CHECK: define weak_odr void @_ZN6test151fILi7EEEvNS_1SIXplT_LNS_1EE3EEEE(
template void f<7>(S<7 + e>);
}
// rdar://problem/8125400. Don't crash.
namespace test16 {
static union {};
static union { union {}; };
static union { struct {}; };
static union { union { union {}; }; };
static union { union { struct {}; }; };
static union { struct { union {}; }; };
static union { struct { struct {}; }; };
}