From: Anders Carlsson Date: Wed, 20 Apr 2011 23:51:43 +0000 (+0000) Subject: Don't add type names for enums; they're never used in LLVM IR. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e0047b13f0025fa1588f1b776592ed3458b226d6;p=clang Don't add type names for enums; they're never used in LLVM IR. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129894 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index f802b0738f..255d12f2cc 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -65,22 +65,22 @@ void CodeGenTypes::HandleLateResolvedPointers() { } } -void CodeGenTypes::addTagTypeName(const TagDecl *TD, const llvm::Type *Ty, - llvm::StringRef suffix) { +void CodeGenTypes::addRecordTypeName(const RecordDecl *RD, const llvm::Type *Ty, + llvm::StringRef suffix) { llvm::SmallString<256> TypeName; llvm::raw_svector_ostream OS(TypeName); - OS << TD->getKindName() << '.'; + OS << RD->getKindName() << '.'; // Name the codegen type after the typedef name // if there is no tag type name available - if (TD->getIdentifier()) { + if (RD->getIdentifier()) { // FIXME: We should not have to check for a null decl context here. // Right now we do it because the implicit Obj-C decls don't have one. - if (TD->getDeclContext()) - OS << TD->getQualifiedNameAsString(); + if (RD->getDeclContext()) + OS << RD->getQualifiedNameAsString(); else - TD->printName(OS); - } else if (const TypedefNameDecl *TDD = TD->getTypedefNameForAnonDecl()) { + RD->printName(OS); + } else if (const TypedefNameDecl *TDD = RD->getTypedefNameForAnonDecl()) { // FIXME: We should not have to check for a null decl context here. // Right now we do it because the implicit Obj-C decls don't have one. if (TDD->getDeclContext()) @@ -403,8 +403,9 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { case Type::Enum: { const TagDecl *TD = cast(Ty).getDecl(); const llvm::Type *Res = ConvertTagDeclType(TD); - - addTagTypeName(TD, Res, llvm::StringRef()); + + if (const RecordDecl *RD = dyn_cast(TD)) + addRecordTypeName(RD, Res, llvm::StringRef()); return Res; } @@ -517,7 +518,7 @@ void CodeGenTypes::addBaseSubobjectTypeName(const CXXRecordDecl *RD, if (layout.getBaseSubobjectLLVMType() != layout.getLLVMType()) suffix = ".base"; - addTagTypeName(RD, layout.getBaseSubobjectLLVMType(), suffix); + addRecordTypeName(RD, layout.getBaseSubobjectLLVMType(), suffix); } bool CodeGenTypes::isZeroInitializable(QualType T) { diff --git a/lib/CodeGen/CodeGenTypes.h b/lib/CodeGen/CodeGenTypes.h index a0e1caa6ed..dc383cb4db 100644 --- a/lib/CodeGen/CodeGenTypes.h +++ b/lib/CodeGen/CodeGenTypes.h @@ -101,10 +101,10 @@ private: /// used to handle cyclic structures properly. void HandleLateResolvedPointers(); - /// addTagTypeName - Compute a name from the given tag decl with an optional - /// suffix and name the given LLVM type using it. - void addTagTypeName(const TagDecl *TD, const llvm::Type *Ty, - llvm::StringRef suffix); + /// addRecordTypeName - Compute a name from the given record decl with an + /// optional suffix and name the given LLVM type using it. + void addRecordTypeName(const RecordDecl *RD, const llvm::Type *Ty, + llvm::StringRef suffix); public: CodeGenTypes(ASTContext &Ctx, llvm::Module &M, const llvm::TargetData &TD,