summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite
diff options
context:
space:
mode:
authorSean Callanan <scallanan@apple.com>2017-04-24 23:14:04 +0000
committerSean Callanan <scallanan@apple.com>2017-04-24 23:14:04 +0000
commitc02a1c03124014ad6781b1b881dbce4f114f0f1b (patch)
tree162c8e515ea3b6517b188f32484a21970144fe2a /lldb/packages/Python/lldbsuite
parent453f74556976d8183b27eb78279cfa107d7aefe6 (diff)
downloadbcm5719-llvm-c02a1c03124014ad6781b1b881dbce4f114f0f1b.tar.gz
bcm5719-llvm-c02a1c03124014ad6781b1b881dbce4f114f0f1b.zip
[Expression parser] Return both types and variables
Many times a user wants to access a type when there's a variable of the same name, or a variable when there's a type of the same name. Depending on the precise context, currently the expression parser can fail to resolve one or the other. This is because ClangExpressionDeclMap has logic to limit the amount of information it searches, and that logic sometimes cuts down the search prematurely. This patch removes some of those early exits. In that sense, this patch trades performance (early exit is faster) for correctness. I've also included two new test cases showing examples of this behavior – as well as modifying an existing test case that gets it wrong. llvm-svn: 301273
Diffstat (limited to 'lldb/packages/Python/lldbsuite')
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile3
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py7
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc36
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/nsimport/TestCppNsImport.py4
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/Makefile3
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/TestSymbols.py7
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/main.cc40
7 files changed, 98 insertions, 2 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile
new file mode 100644
index 00000000000..f11f126fa64
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/Makefile
@@ -0,0 +1,3 @@
+LEVEL = ../../../make
+C_SOURCES := main.c
+include $(LEVEL)/Makefile.rules \ No newline at end of file
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py
new file mode 100644
index 00000000000..8e83a3ab1a4
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/TestLLVMStyle.py
@@ -0,0 +1,7 @@
+from lldbsuite.test import lldbinline
+from lldbsuite.test import decorators
+
+lldbinline.MakeInlineTest(
+ __file__, globals(), [
+ decorators.expectedFailureAll(
+ oslist=["windows"], bugnumber="llvm.org/pr24764")]) \ No newline at end of file
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc
new file mode 100644
index 00000000000..040cf44defd
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/llvm-style/main.cc
@@ -0,0 +1,36 @@
+//===-- main.cc -------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LIDENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+namespace n {
+ struct D {
+ int i;
+ static int anInt() { return 2; }
+ int dump() { return i; }
+ };
+
+ class C {
+ public:
+ int foo(D *D);
+ };
+}
+
+using namespace n;
+
+int C::foo(D* D) {
+ return D->dump(); //% self.expect("expression -- D->dump()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "2"])
+ //% self.expect("expression -- D::anInt()", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "2"])
+
+}
+
+int main (int argc, char const *argv[])
+{
+ D myD { D::anInt() };
+ C().foo(&myD);
+ return 0;
+}
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/nsimport/TestCppNsImport.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/nsimport/TestCppNsImport.py
index 878cc4fd4f7..fb7fadffa78 100644
--- a/lldb/packages/Python/lldbsuite/test/lang/cpp/nsimport/TestCppNsImport.py
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/nsimport/TestCppNsImport.py
@@ -111,8 +111,8 @@ class TestCppNsImport(TestBase):
test_result = frame.EvaluateExpression("imported")
self.assertTrue(
- test_result.IsValid() and test_result.GetError().Fail(),
- "imported is ambiguous")
+ test_result.IsValid() and test_result.GetValueAsSigned() == 99,
+ "imported = 99")
test_result = frame.EvaluateExpression("single")
self.assertTrue(
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/Makefile
new file mode 100644
index 00000000000..cd9ca5c86d8
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/Makefile
@@ -0,0 +1,3 @@
+LEVEL = ../../../make
+C_SOURCES := main.c
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/TestSymbols.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/TestSymbols.py
new file mode 100644
index 00000000000..af362f5be5d
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/TestSymbols.py
@@ -0,0 +1,7 @@
+from lldbsuite.test import lldbinline
+from lldbsuite.test import decorators
+
+lldbinline.MakeInlineTest(
+ __file__, globals(), [
+ decorators.expectedFailureAll(
+ oslist=["windows"], bugnumber="llvm.org/pr24764")])
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/main.cc b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/main.cc
new file mode 100644
index 00000000000..cd9b3a6a031
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/symbols/main.cc
@@ -0,0 +1,40 @@
+//===-- main.cc -------------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LIDENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+void *D = 0;
+
+class D {
+ static int i;
+};
+
+int D::i = 3;
+
+namespace errno {
+ int j = 4;
+};
+
+int twice(int n)
+{
+ return n * 2; //% self.expect("expression -- D::i", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "3"])
+ //% self.expect("expression -- D", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["void"])
+ //% self.expect("expression -- errno::j", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "4"])
+}
+
+const char getAChar()
+{
+ const char D[] = "Hello world";
+ return D[0]; //% self.expect("expression -- D::i", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["int", "3"])
+ //% self.expect("expression -- D", DATA_TYPES_DISPLAYED_CORRECTLY, substrs = ["char", "Hello"])
+}
+
+int main (int argc, char const *argv[])
+{
+ int six = twice(3);
+ return 0;
+}
OpenPOWER on IntegriCloud