From 161ade4455fd8bccff40f685c91463a7221f7ece Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Sat, 21 Nov 2009 09:14:44 +0000 Subject: [PATCH] Mangler: Strengthen invariants, MangleContext::mangleName should only be called on var or function decls. llvm-svn: 89554 --- clang/lib/CodeGen/Mangle.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/clang/lib/CodeGen/Mangle.cpp b/clang/lib/CodeGen/Mangle.cpp index cb27f5c9316c..a4b2fce7c196 100644 --- a/clang/lib/CodeGen/Mangle.cpp +++ b/clang/lib/CodeGen/Mangle.cpp @@ -169,18 +169,15 @@ bool CXXNameMangler::mangle(const NamedDecl *D) { if (const FunctionDecl *FD = dyn_cast(D)) return mangleFunctionDecl(FD); - if (const VarDecl *VD = dyn_cast(D)) { - if (!Context.getASTContext().getLangOptions().CPlusPlus || - isInCLinkageSpecification(D) || - D->getDeclContext()->isTranslationUnit()) - return false; + const VarDecl *VD = cast(D); + if (!Context.getASTContext().getLangOptions().CPlusPlus || + isInCLinkageSpecification(D) || + D->getDeclContext()->isTranslationUnit()) + return false; - Out << "_Z"; - mangleName(VD); - return true; - } - - return false; + Out << "_Z"; + mangleName(VD); + return true; } void CXXNameMangler::mangleFunctionEncoding(const FunctionDecl *FD) { @@ -1298,10 +1295,10 @@ void CXXNameMangler::addSubstitution(uintptr_t Ptr) { /// name. bool MangleContext::mangleName(const NamedDecl *D, llvm::SmallVectorImpl &Res) { - assert(!isa(D) && - "Use mangleCXXCtor for constructor decls!"); - assert(!isa(D) && - "Use mangleCXXDtor for destructor decls!"); + assert((isa(D) || isa(D)) && + "Invalid mangleName() call, argument is not a variable or function!"); + assert(!isa(D) && !isa(D) && + "Invalid mangleName() call on 'structor decl!"); PrettyStackTraceDecl CrashInfo(D, SourceLocation(), getASTContext().getSourceManager(),