summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2012-01-05 22:35:40 +0000
committerSean Callanan <scallanan@apple.com>2012-01-05 22:35:40 +0000
commit3c88eae154417358457793b185c80b0bde201d5c (patch)
treee08da038b55879110dcc31a6d25f27b713081c8c
parentde30e523b40de486a385935550b43798eb4c77bf (diff)
downloadbcm5719-llvm-3c88eae154417358457793b185c80b0bde201d5c.tar.gz
bcm5719-llvm-3c88eae154417358457793b185c80b0bde201d5c.zip
Fixed a problem in our local Clang's method for
performing Objective-C instance variable lookup. Previously, it only completed the derived class that was the beginning of the search. Now, as it walks up the superclass chain looking for the ivar, it completes each superclass in turn. Also added a testcase covering this issue. llvm-svn: 147621
-rw-r--r--lldb/scripts/clang.complete-type-ivar-lookup.diff19
-rw-r--r--lldb/test/lang/objc/foundation/TestObjCMethods.py4
2 files changed, 23 insertions, 0 deletions
diff --git a/lldb/scripts/clang.complete-type-ivar-lookup.diff b/lldb/scripts/clang.complete-type-ivar-lookup.diff
new file mode 100644
index 00000000000..81db76942ef
--- /dev/null
+++ b/lldb/scripts/clang.complete-type-ivar-lookup.diff
@@ -0,0 +1,19 @@
+Index: lib/AST/DeclObjC.cpp
+===================================================================
+--- lib/AST/DeclObjC.cpp (revision 146622)
++++ lib/AST/DeclObjC.cpp (working copy)
+@@ -244,11 +244,11 @@
+
+ ObjCIvarDecl *ObjCInterfaceDecl::lookupInstanceVariable(IdentifierInfo *ID,
+ ObjCInterfaceDecl *&clsDeclared) {
+- if (ExternallyCompleted)
+- LoadExternalDefinition();
+-
+ ObjCInterfaceDecl* ClassDecl = this;
+ while (ClassDecl != NULL) {
++ if (ClassDecl->ExternallyCompleted)
++ ClassDecl->LoadExternalDefinition();
++
+ if (ObjCIvarDecl *I = ClassDecl->getIvarDecl(ID)) {
+ clsDeclared = ClassDecl;
+ return I;
diff --git a/lldb/test/lang/objc/foundation/TestObjCMethods.py b/lldb/test/lang/objc/foundation/TestObjCMethods.py
index a5d497c1427..7d5618d146c 100644
--- a/lldb/test/lang/objc/foundation/TestObjCMethods.py
+++ b/lldb/test/lang/objc/foundation/TestObjCMethods.py
@@ -165,6 +165,10 @@ class FoundationTestCase(TestBase):
substrs = ["(MyString) *self",
"(NSString *) str",
"(NSDate *) date"])
+
+ # isa should be accessible.
+ self.expect("expression self->isa", VARIABLES_DISPLAYED_CORRECTLY,
+ substrs = ["(Class)"])
# This should fail expectedly.
self.expect("expression self->non_existent_member",
OpenPOWER on IntegriCloud