rewrite some of the type refinement code to eliminate dangling pointers
simplify the code and generally make it more robust.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46745 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/CodeGen/CodeGenModule.cpp b/CodeGen/CodeGenModule.cpp
index 9de5d34..eff26f9 100644
--- a/CodeGen/CodeGenModule.cpp
+++ b/CodeGen/CodeGenModule.cpp
@@ -261,6 +261,27 @@
EmitGlobalVar(D);
}
+void CodeGenModule::EmitType(const TypeDecl *D) {
+ if (isa<TypedefDecl>(D)) {
+ // TODO: Emit debug info.
+ return;
+ }
+
+ assert(!isa<ObjCInterfaceDecl>(D) && "FIXME: ADD OBJC SUPPORT");
+
+ // This must be a tag decl.
+ const TagDecl *TD = cast<TagDecl>(D);
+
+ // Get the LLVM type for this TagDecl. If it is non-opaque or if this decl
+ // is still a forward declaration, just return.
+ QualType NewTy = Context.getTagDeclType(const_cast<TagDecl *>(TD));
+ const llvm::Type *T = Types.ConvertType(NewTy);
+ if (isa<llvm::OpaqueType>(T) && TD->isDefinition())
+ // Make sure that this type is translated.
+ Types.ForceTypeCompilation(NewTy);
+}
+
+
/// getBuiltinLibFunction
llvm::Function *CodeGenModule::getBuiltinLibFunction(unsigned BuiltinID) {
if (BuiltinID > BuiltinFunctions.size())