aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CodeGenTypes.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/CodeGen/CodeGenTypes.cpp')
-rw-r--r--lib/CodeGen/CodeGenTypes.cpp11
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: