summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite/test/expression_command
diff options
context:
space:
mode:
authorShafik Yaghmour <syaghmour@apple.com>2019-05-03 19:59:22 +0000
committerShafik Yaghmour <syaghmour@apple.com>2019-05-03 19:59:22 +0000
commite5cbe78259c9b3f181f267ac82bde04dd8a57df8 (patch)
tree7f7ec3e6040682816f00de93a35193190a959520 /lldb/packages/Python/lldbsuite/test/expression_command
parent70f5e050e7d874cc108fc0e644625d1836059b66 (diff)
downloadbcm5719-llvm-e5cbe78259c9b3f181f267ac82bde04dd8a57df8.tar.gz
bcm5719-llvm-e5cbe78259c9b3f181f267ac82bde04dd8a57df8.zip
Fix for ambiguous lookup in expressions between local variable and namespace
Summary: In an Objective-C context a local variable and namespace can cause an ambiguous name lookup when used in an expression. The solution involves mimicking the existing C++ solution which is to add local using declarations for local variables. This causes a different type of lookup to be used which eliminates the namespace during acceptable results filtering. Differential Revision: https://reviews.llvm.org/D59960 llvm-svn: 359921
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test/expression_command')
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/Makefile5
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/TestNamespaceLocalVarSameNameCppAndC.py24
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/main.cpp21
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile5
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py24
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.mm16
-rw-r--r--lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm22
7 files changed, 117 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/Makefile b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/Makefile
new file mode 100644
index 00000000000..8a7102e347a
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/TestNamespaceLocalVarSameNameCppAndC.py b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/TestNamespaceLocalVarSameNameCppAndC.py
new file mode 100644
index 00000000000..ab2ddd07480
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/TestNamespaceLocalVarSameNameCppAndC.py
@@ -0,0 +1,24 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestNamespaceLocalVarSameNameCppAndC(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @skipUnlessDarwin
+ @add_test_categories(["gmodules"])
+ def test_namespace_local_var_same_name_cpp_and_c(self):
+ self.build()
+
+ (self.target, self.process, _, bkpt) = lldbutil.run_to_source_breakpoint(self, '// break here',
+ lldb.SBFileSpec("main.cpp", False))
+
+ self.expect("expr error",
+ substrs=['(int) $0 = 1'])
+
+ lldbutil.continue_to_breakpoint(self.process, bkpt)
+
+ self.expect("expr error",
+ substrs=['(int) $1 = 1'])
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/main.cpp b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/main.cpp
new file mode 100644
index 00000000000..cd1bac3cda7
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_cpp_and_c/main.cpp
@@ -0,0 +1,21 @@
+namespace error {
+ int x;
+}
+
+struct A {
+ void foo() {
+ int error=1;
+
+ return; // break here
+ }
+};
+
+int main() {
+ int error=1;
+
+ A a;
+
+ a.foo();
+
+ return 0; // break here
+}
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile
new file mode 100644
index 00000000000..67553218d80
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../make
+OBJCXX_SOURCES := main.mm util.mm
+include $(LEVEL)/Makefile.rules
+
+LDFLAGS += -framework Foundation
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py
new file mode 100644
index 00000000000..eb894cc37e4
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/TestNamespaceLocalVarSameNameObjC.py
@@ -0,0 +1,24 @@
+import lldb
+from lldbsuite.test.decorators import *
+from lldbsuite.test.lldbtest import *
+from lldbsuite.test import lldbutil
+
+class TestNamespaceLocalVarSameNameObjC(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @skipUnlessDarwin
+ @add_test_categories(["gmodules"])
+ def test_namespace_local_var_same_name_obj_c(self):
+ self.build()
+
+ (self.target, self.process, _, bkpt) = lldbutil.run_to_source_breakpoint(self, '// break here',
+ lldb.SBFileSpec("util.mm", False))
+
+ self.expect("expr error",
+ substrs=['(NSError *) $0 ='])
+
+ lldbutil.continue_to_breakpoint(self.process, bkpt)
+
+ self.expect("expr error",
+ substrs=['(NSError *) $1 ='])
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.mm b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.mm
new file mode 100644
index 00000000000..70e9598eefb
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/main.mm
@@ -0,0 +1,16 @@
+#import <Foundation/Foundation.h>
+@interface Util : NSObject
++ (void)debugPrintErrorStatic;
+- (void)debugPrintError;
+@end
+
+int main(int argc, const char * argv[]) {
+ [Util debugPrintErrorStatic];
+
+ Util *u = [[Util alloc] init];
+
+ [u debugPrintError];
+
+ return 0;
+}
+
diff --git a/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm
new file mode 100644
index 00000000000..11c9c141df0
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/expression_command/namespace_local_var_same_name_obj_c/util.mm
@@ -0,0 +1,22 @@
+#import <Foundation/Foundation.h>
+
+namespace error {
+int blah;
+}
+
+@interface Util : NSObject
++ (void)debugPrintErrorStatic;
+- (void)debugPrintError;
+@end
+
+@implementation Util
++ (void)debugPrintErrorStatic {
+ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:nil];
+ NSLog(@"xxx, error = %@", error); // break here
+}
+
+- (void)debugPrintError {
+ NSError* error = [NSError errorWithDomain:NSURLErrorDomain code:-1 userInfo:nil];
+ NSLog(@"xxx, error = %@", error); // break here
+}
+@end
OpenPOWER on IntegriCloud