summaryrefslogtreecommitdiffstats
path: root/lldb/test/lang/cpp
diff options
context:
space:
mode:
authorPaul Herman <paulherman@google.com>2015-09-15 23:44:17 +0000
committerPaul Herman <paulherman@google.com>2015-09-15 23:44:17 +0000
commitd628cbb999070e30986a5f9b24b3ffe8ebcd6bc4 (patch)
tree029f2d84d919aaf8a6902d3f5e5daa2d80cb9101 /lldb/test/lang/cpp
parentdff84070da5ca09ab89c87036f01e21b31f81a0f (diff)
downloadbcm5719-llvm-d628cbb999070e30986a5f9b24b3ffe8ebcd6bc4.tar.gz
bcm5719-llvm-d628cbb999070e30986a5f9b24b3ffe8ebcd6bc4.zip
Search variables based on clang::DeclContext and clang::Decl tree
Summary: SymbolFileDWARF now creates VarDecl and BlockDecl and adds them to the Decl tree. Then, in ClangExpressionDeclMap it uses the Decl tree to search for a variable. This fixes lots of variable scoping problems. Reviewers: sivachandra, chaoren, spyffe, clayborg Subscribers: tberghammer, jingham, lldb-commits Differential Revision: http://reviews.llvm.org/D12658 llvm-svn: 247746
Diffstat (limited to 'lldb/test/lang/cpp')
-rw-r--r--lldb/test/lang/cpp/nsimport/TestCppNsImport.py33
-rw-r--r--lldb/test/lang/cpp/nsimport/main.cpp50
2 files changed, 80 insertions, 3 deletions
diff --git a/lldb/test/lang/cpp/nsimport/TestCppNsImport.py b/lldb/test/lang/cpp/nsimport/TestCppNsImport.py
index d28f075b417..5415c3dae18 100644
--- a/lldb/test/lang/cpp/nsimport/TestCppNsImport.py
+++ b/lldb/test/lang/cpp/nsimport/TestCppNsImport.py
@@ -16,6 +16,8 @@ class TestCppNsImport(TestBase):
self.buildDsym()
self.check()
+ # This test is expected to fail because DW_TAG_imported_declaration and DW_TAG_imported_module are not parsed in SymbolFileDWARF
+ @expectedFailureAll
@dwarf_test
def test_with_dwarf_and_run_command(self):
"""Tests imported namespaces in C++."""
@@ -45,6 +47,8 @@ class TestCppNsImport(TestBase):
# Break on main function
break_0 = target.BreakpointCreateBySourceRegex("// break 0", src_file_spec)
self.assertTrue(break_0.IsValid() and break_0.GetNumLocations() >= 1, VALID_BREAKPOINT)
+ break_1 = target.BreakpointCreateBySourceRegex("// break 1", src_file_spec)
+ self.assertTrue(break_1.IsValid() and break_1.GetNumLocations() >= 1, VALID_BREAKPOINT)
# Launch the process
args = None
@@ -72,6 +76,35 @@ class TestCppNsImport(TestBase):
test_result = frame.EvaluateExpression("anon")
self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 2, "anon = 2")
+ test_result = frame.EvaluateExpression("global")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 4, "global = 4")
+
+ test_result = frame.EvaluateExpression("fun_var")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 9, "fun_var = 9")
+
+ test_result = frame.EvaluateExpression("not_imported")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 35, "not_imported = 35")
+
+ test_result = frame.EvaluateExpression("imported")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 99, "imported = 99")
+
+ test_result = frame.EvaluateExpression("single")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 3, "single = 3")
+
+ # Continue to second breakpoint
+ process.Continue()
+
+ # Get the thread of the process
+ self.assertTrue(process.GetState() == lldb.eStateStopped, PROCESS_STOPPED)
+ thread = lldbutil.get_stopped_thread(process, lldb.eStopReasonBreakpoint)
+
+ # Get current fream of the thread at the breakpoint
+ frame = thread.GetSelectedFrame()
+
+ # Test function inside namespace
+ test_result = frame.EvaluateExpression("fun_var")
+ self.assertTrue(test_result.IsValid() and test_result.GetValueAsSigned() == 5, "fun_var = 5")
+
if __name__ == '__main__':
import atexit
diff --git a/lldb/test/lang/cpp/nsimport/main.cpp b/lldb/test/lang/cpp/nsimport/main.cpp
index e5d5b7059b0..e125ebaa243 100644
--- a/lldb/test/lang/cpp/nsimport/main.cpp
+++ b/lldb/test/lang/cpp/nsimport/main.cpp
@@ -16,13 +16,57 @@ namespace Nested
}
}
-using namespace N;
-using namespace Nested;
+namespace Global
+{
+ int global;
+}
+
+namespace Fun
+{
+ int fun_var;
+ int fun()
+ {
+ fun_var = 5;
+ return 0; // break 1
+ }
+}
+
+namespace Single
+{
+ int single = 3;
+}
+
+namespace NotImportedBefore
+{
+ int not_imported = 45;
+}
+
+using namespace Global;
+
+int not_imported = 35;
+int fun_var = 9;
+
+namespace NotImportedAfter
+{
+ int not_imported = 55;
+}
+
+namespace Imported
+{
+ int imported = 99;
+}
+
+int imported = 89;
int main()
{
+ using namespace N;
+ using namespace Nested;
+ using namespace Imported;
+ using Single::single;
n = 1;
anon = 2;
nested = 3;
- return 0; // break 0
+ global = 4;
+ return Fun::fun(); // break 0
}
OpenPOWER on IntegriCloud