summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2012-03-16 05:34:53 +0000
committerSean Callanan <scallanan@apple.com>2012-03-16 05:34:53 +0000
commitd6a4b2cdb2acf37bc96a701f84bbb1ec7496db01 (patch)
treeec2bc78dbb4c439927a285fda8d4cf10c95dc010
parente2355255570aa6573538d6030ee6442df2960fd2 (diff)
downloadbcm5719-llvm-d6a4b2cdb2acf37bc96a701f84bbb1ec7496db01.tar.gz
bcm5719-llvm-d6a4b2cdb2acf37bc96a701f84bbb1ec7496db01.zip
Integrated two high-value Clang fixes:
- Clang now completes all Objective-C objects (if they are not already complete, and they have external lexical sources) during structure layout, avoiding a LLDB crash. - The Clang Decl printer handles reference types correctly. This prevents LLDB from crashing when expression logging is enabled. llvm-svn: 152897
-rw-r--r--lldb/scripts/clang.complete-type-getObjCLayout.diff13
-rw-r--r--lldb/scripts/clang.decl-printer-reference-type.diff13
2 files changed, 26 insertions, 0 deletions
diff --git a/lldb/scripts/clang.complete-type-getObjCLayout.diff b/lldb/scripts/clang.complete-type-getObjCLayout.diff
new file mode 100644
index 00000000000..23609572540
--- /dev/null
+++ b/lldb/scripts/clang.complete-type-getObjCLayout.diff
@@ -0,0 +1,13 @@
+Index: lib/AST/RecordLayoutBuilder.cpp
+===================================================================
+--- lib/AST/RecordLayoutBuilder.cpp (revision 152265)
++++ lib/AST/RecordLayoutBuilder.cpp (working copy)
+@@ -2313,6 +2313,8 @@
+ ASTContext::getObjCLayout(const ObjCInterfaceDecl *D,
+ const ObjCImplementationDecl *Impl) const {
+ // Retrieve the definition
++ if (D->hasExternalLexicalStorage() && !D->getDefinition())
++ getExternalSource()->CompleteType(const_cast<ObjCInterfaceDecl*>(D));
+ D = D->getDefinition();
+ assert(D && D->isThisDeclarationADefinition() && "Invalid interface decl!");
+
diff --git a/lldb/scripts/clang.decl-printer-reference-type.diff b/lldb/scripts/clang.decl-printer-reference-type.diff
new file mode 100644
index 00000000000..b0150fee695
--- /dev/null
+++ b/lldb/scripts/clang.decl-printer-reference-type.diff
@@ -0,0 +1,13 @@
+Index: lib/AST/DeclPrinter.cpp
+===================================================================
+--- lib/AST/DeclPrinter.cpp (revision 152772)
++++ lib/AST/DeclPrinter.cpp (working copy)
+@@ -114,6 +114,8 @@
+ BaseType = FTy->getResultType();
+ else if (const VectorType *VTy = BaseType->getAs<VectorType>())
+ BaseType = VTy->getElementType();
++ else if (const ReferenceType *RTy = BaseType->getAs<ReferenceType>())
++ BaseType = RTy->getPointeeType();
+ else
+ llvm_unreachable("Unknown declarator!");
+ }
OpenPOWER on IntegriCloud