diff options
author | Eugene Leviant <evgeny.leviant@gmail.com> | 2015-11-13 11:00:10 +0000 |
---|---|---|
committer | Eugene Leviant <evgeny.leviant@gmail.com> | 2015-11-13 11:00:10 +0000 |
commit | c1ba9fcb2790e07a478700ce78fb08283839634c (patch) | |
tree | 6be8b8ba8e93e67de6900a11fd3fbf09075894c3 /lldb/packages/Python/lldbsuite/test | |
parent | 2e31ce1ea7ce3a16202bb55130d552b753282a33 (diff) | |
download | bcm5719-llvm-c1ba9fcb2790e07a478700ce78fb08283839634c.tar.gz bcm5719-llvm-c1ba9fcb2790e07a478700ce78fb08283839634c.zip |
Fix multiple symbol lookup in the same namespace
llvm-svn: 253028
Diffstat (limited to 'lldb/packages/Python/lldbsuite/test')
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/TestNamespace.py | 30 | ||||
-rw-r--r-- | lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp | 22 |
2 files changed, 44 insertions, 8 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/TestNamespace.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/TestNamespace.py index ab6b83bed9b..a60d8252e9f 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/TestNamespace.py +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/TestNamespace.py @@ -26,6 +26,16 @@ class NamespaceTestCase(TestBase): # And the line number to break at. self.line_break = line_number('main.cpp', '// Set break point at this line.') + # Break inside do {} while and evaluate value + self.line_break_ns1 = line_number('main.cpp', '// Evaluate ns1::value') + self.line_break_ns2 = line_number('main.cpp', '// Evaluate ns2::value') + + def runToBkpt(self, command): + self.runCmd(command, RUN_SUCCEEDED) + # The stop reason of the thread should be breakpoint. + self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, + substrs = ['stopped', + 'stop reason = breakpoint']) # rdar://problem/8668674 @expectedFailureWindows("llvm.org/pr24764") @@ -34,15 +44,19 @@ class NamespaceTestCase(TestBase): self.build() self.runCmd("file a.out", CURRENT_EXECUTABLE_SET) + lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line_break_ns1, num_expected_locations=1, loc_exact=True) + lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line_break_ns2, num_expected_locations=1, loc_exact=True) lldbutil.run_break_set_by_file_and_line (self, "main.cpp", self.line_break, num_expected_locations=1, loc_exact=True) - self.runCmd("run", RUN_SUCCEEDED) - - # The stop reason of the thread should be breakpoint. - self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, - substrs = ['stopped', - 'stop reason = breakpoint']) + self.runToBkpt("run") + # Evaluate ns1::value + self.expect("expression -- value", startstr = "(int) $0 = 100") + self.runToBkpt("continue") + # Evaluate ns2::value + self.expect("expression -- value", startstr = "(int) $1 = 200") + + self.runToBkpt("continue") # On Mac OS X, gcc 4.2 emits the wrong debug info with respect to types. slist = ['(int) a = 12', 'anon_uint', 'a_uint', 'b_uint', 'y_uint'] if self.platformIsDarwin() and self.getCompiler() in ['clang', 'llvm-gcc']: @@ -83,8 +97,8 @@ class NamespaceTestCase(TestBase): # test/namespace: 'expression -- i+j' not working # This has been fixed. self.expect("expression -- i + j", - startstr = "(int) $0 = 7") - # (int) $0 = 7 + startstr = "(int) $2 = 7") + # (int) $2 = 7 self.runCmd("expression -- i") self.runCmd("expression -- j") diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp index 4dec275c2c5..4de7a1ada8d 100644 --- a/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp +++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/namespace/main.cpp @@ -72,9 +72,31 @@ namespace A { } } +namespace ns1 { + int value = 100; +} + +namespace ns2 { + int value = 200; +} + #include <stdio.h> +void test_namespace_scopes() { + do { + using namespace ns1; + printf("ns1::value = %d\n", value); // Evaluate ns1::value + } while(0); + + do { + using namespace ns2; + printf("ns2::value = %d\n", value); // Evaluate ns2::value + } while(0); +} + int Foo::myfunc(int a) { + test_namespace_scopes(); + ::my_uint_t anon_uint = 0; A::uint_t a_uint = 1; B::uint_t b_uint = 2; |