forked from OSchip/llvm-project
Get rid of dead/useless code for block mangling.
llvm-svn: 185989
This commit is contained in:
parent
7ad05d136a
commit
8978a9dd0a
|
@ -135,9 +135,6 @@ public:
|
|||
const BlockDecl *BD, raw_ostream &Out);
|
||||
void mangleBlock(const DeclContext *DC, const BlockDecl *BD,
|
||||
raw_ostream &Out);
|
||||
// Do the right thing.
|
||||
void mangleBlock(const BlockDecl *BD, raw_ostream &Out,
|
||||
const NamedDecl *ID=0);
|
||||
|
||||
void mangleObjCMethodName(const ObjCMethodDecl *MD,
|
||||
raw_ostream &);
|
||||
|
|
|
@ -34,8 +34,6 @@ using namespace clang;
|
|||
// FIXME: For blocks we currently mimic GCC's mangling scheme, which leaves
|
||||
// much to be desired. Come up with a better mangling scheme.
|
||||
|
||||
namespace {
|
||||
|
||||
static void mangleFunctionBlock(MangleContext &Context,
|
||||
StringRef Outer,
|
||||
const BlockDecl *BD,
|
||||
|
@ -47,22 +45,6 @@ static void mangleFunctionBlock(MangleContext &Context,
|
|||
Out << "__" << Outer << "_block_invoke_" << discriminator+1;
|
||||
}
|
||||
|
||||
static void checkMangleDC(const DeclContext *DC, const BlockDecl *BD) {
|
||||
#ifndef NDEBUG
|
||||
const DeclContext *ExpectedDC = BD->getDeclContext();
|
||||
while (isa<BlockDecl>(ExpectedDC) || isa<EnumDecl>(ExpectedDC))
|
||||
ExpectedDC = ExpectedDC->getParent();
|
||||
// In-class initializers for non-static data members are lexically defined
|
||||
// within the class, but are mangled as if they were specified as constructor
|
||||
// member initializers.
|
||||
if (isa<CXXRecordDecl>(ExpectedDC) && DC != ExpectedDC)
|
||||
DC = DC->getParent();
|
||||
assert(DC == ExpectedDC && "Given decl context did not match expected!");
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void MangleContext::anchor() { }
|
||||
|
||||
void MangleContext::mangleGlobalBlock(const BlockDecl *BD,
|
||||
|
@ -85,7 +67,6 @@ void MangleContext::mangleGlobalBlock(const BlockDecl *BD,
|
|||
void MangleContext::mangleCtorBlock(const CXXConstructorDecl *CD,
|
||||
CXXCtorType CT, const BlockDecl *BD,
|
||||
raw_ostream &ResStream) {
|
||||
checkMangleDC(CD, BD);
|
||||
SmallString<64> Buffer;
|
||||
llvm::raw_svector_ostream Out(Buffer);
|
||||
mangleCXXCtor(CD, CT, Out);
|
||||
|
@ -96,7 +77,6 @@ void MangleContext::mangleCtorBlock(const CXXConstructorDecl *CD,
|
|||
void MangleContext::mangleDtorBlock(const CXXDestructorDecl *DD,
|
||||
CXXDtorType DT, const BlockDecl *BD,
|
||||
raw_ostream &ResStream) {
|
||||
checkMangleDC(DD, BD);
|
||||
SmallString<64> Buffer;
|
||||
llvm::raw_svector_ostream Out(Buffer);
|
||||
mangleCXXDtor(DD, DT, Out);
|
||||
|
@ -107,7 +87,6 @@ void MangleContext::mangleDtorBlock(const CXXDestructorDecl *DD,
|
|||
void MangleContext::mangleBlock(const DeclContext *DC, const BlockDecl *BD,
|
||||
raw_ostream &Out) {
|
||||
assert(!isa<CXXConstructorDecl>(DC) && !isa<CXXDestructorDecl>(DC));
|
||||
checkMangleDC(DC, BD);
|
||||
|
||||
SmallString<64> Buffer;
|
||||
llvm::raw_svector_ostream Stream(Buffer);
|
||||
|
@ -145,15 +124,3 @@ void MangleContext::mangleObjCMethodName(const ObjCMethodDecl *MD,
|
|||
|
||||
Out << OS.str().size() << OS.str();
|
||||
}
|
||||
|
||||
void MangleContext::mangleBlock(const BlockDecl *BD,
|
||||
raw_ostream &Out,
|
||||
const NamedDecl *ID) {
|
||||
const DeclContext *DC = BD->getDeclContext();
|
||||
while (isa<BlockDecl>(DC) || isa<EnumDecl>(DC))
|
||||
DC = DC->getParent();
|
||||
if (DC->isFunctionOrMethod())
|
||||
mangleBlock(DC, BD, Out);
|
||||
else
|
||||
mangleGlobalBlock(BD, ID, Out);
|
||||
}
|
||||
|
|
|
@ -556,7 +556,14 @@ void MicrosoftCXXNameMangler::manglePostfix(const DeclContext *DC,
|
|||
return;
|
||||
|
||||
if (const BlockDecl *BD = dyn_cast<BlockDecl>(DC)) {
|
||||
Context.mangleBlock(BD, Out);
|
||||
DiagnosticsEngine Diags = Context.getDiags();
|
||||
unsigned DiagID = Diags.getCustomDiagID(DiagnosticsEngine::Error,
|
||||
"cannot mangle a local inside this block yet");
|
||||
Diags.Report(BD->getLocation(), DiagID);
|
||||
|
||||
// FIXME: This is completely, utterly, wrong; see ItaniumMangle
|
||||
// for how this should be done.
|
||||
Out << "__block_invoke" << Context.getBlockId(BD, false);
|
||||
Out << '@';
|
||||
return manglePostfix(DC->getParent(), NoFunction);
|
||||
} else if (isa<CapturedDecl>(DC)) {
|
||||
|
|
|
@ -434,9 +434,6 @@ StringRef CodeGenModule::getMangledName(GlobalDecl GD) {
|
|||
getCXXABI().getMangleContext().mangleCXXCtor(D, GD.getCtorType(), Out);
|
||||
else if (const CXXDestructorDecl *D = dyn_cast<CXXDestructorDecl>(ND))
|
||||
getCXXABI().getMangleContext().mangleCXXDtor(D, GD.getDtorType(), Out);
|
||||
else if (const BlockDecl *BD = dyn_cast<BlockDecl>(ND))
|
||||
getCXXABI().getMangleContext().mangleBlock(BD, Out,
|
||||
dyn_cast_or_null<VarDecl>(initializedGlobalDecl.getDecl()));
|
||||
else
|
||||
getCXXABI().getMangleContext().mangleName(ND, Out);
|
||||
|
||||
|
|
Loading…
Reference in New Issue