diff options
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r-- | lib/CodeGen/CodeGenTypes.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/CodeGen/CodeGenTypes.cpp b/lib/CodeGen/CodeGenTypes.cpp index 6ff394e03c..5c474d557a 100644 --- a/lib/CodeGen/CodeGenTypes.cpp +++ b/lib/CodeGen/CodeGenTypes.cpp @@ -43,9 +43,14 @@ CodeGenTypes::~CodeGenTypes() { } /// ConvertType - Convert the specified type to its LLVM form. -const llvm::Type *CodeGenTypes::ConvertType(QualType T) { - llvm::PATypeHolder Result = ConvertTypeRecursive(T); +const llvm::Type *CodeGenTypes::ConvertType(QualType T, bool IsRecursive) { + const llvm::Type *RawResult = ConvertTypeRecursive(T); + + if (IsRecursive || PointersToResolve.empty()) + return RawResult; + llvm::PATypeHolder Result = RawResult; + // Any pointers that were converted deferred evaluation of their pointee type, // creating an opaque type instead. This is in order to avoid problems with // circular types. Loop through all these defered pointees, if any, and @@ -332,7 +337,7 @@ const llvm::Type *CodeGenTypes::ConvertNewType(QualType T) { isVariadic = true; } - return GetFunctionType(*FI, isVariadic); + return GetFunctionType(*FI, isVariadic, true); } case Type::ObjCObject: |