aboutsummaryrefslogtreecommitdiff
path: root/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-02-06 05:48:29 +0000
committerChris Lattner <sabre@nondot.org>2008-02-06 05:48:29 +0000
commitde0efb3b6eac36bdeae0e60f753a974cc4118a31 (patch)
treef126a88617fc2c690ca77c384ba7ef2e9a533dfe /CodeGen/CodeGenTypes.cpp
parent75afb585496b8c521672a6a91b8dd1838d36185a (diff)
only convert the type name once, not each type it is refined.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46807 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'CodeGen/CodeGenTypes.cpp')
-rw-r--r--CodeGen/CodeGenTypes.cpp37
1 files changed, 19 insertions, 18 deletions
diff --git a/CodeGen/CodeGenTypes.cpp b/CodeGen/CodeGenTypes.cpp
index 0651b67cca..a659003465 100644
--- a/CodeGen/CodeGenTypes.cpp
+++ b/CodeGen/CodeGenTypes.cpp
@@ -277,8 +277,25 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) {
assert(0 && "FIXME: add missing functionality here");
break;
- case Type::Tagged:
- return ConvertTagDeclType(T, cast<TagType>(Ty).getDecl());
+ case Type::Tagged: {
+ const TagDecl *TD = cast<TagType>(Ty).getDecl();
+ const llvm::Type *Res = ConvertTagDeclType(T, TD);
+
+ std::string TypeName(TD->getKindName());
+ TypeName += '.';
+
+ // Name the codegen type after the typedef name
+ // if there is no tag type name available
+ if (TD->getIdentifier())
+ TypeName += TD->getName();
+ else if (const TypedefType *TdT = dyn_cast<TypedefType>(T))
+ TypeName += TdT->getDecl()->getName();
+ else
+ TypeName += "anon";
+
+ TheModule.addTypeName(TypeName, Res);
+ return Res;
+ }
}
// FIXME: implement.
@@ -386,22 +403,6 @@ const llvm::Type *CodeGenTypes::ConvertTagDeclType(QualType T,
assert(0 && "FIXME: Unknown tag decl kind!");
}
- std::string TypeName(TD->getKindName());
- TypeName += '.';
-
- // Name the codegen type after the typedef name
- // if there is no tag type name available
- if (TD->getIdentifier() == 0) {
- if (T->getTypeClass() == Type::TypeName) {
- const TypedefType *TdT = cast<TypedefType>(T);
- TypeName += TdT->getDecl()->getName();
- } else
- TypeName += "anon";
- } else {
- TypeName += TD->getName();
- }
-
- TheModule.addTypeName(TypeName, ResultType);
return ResultType;
}