summaryrefslogtreecommitdiffstats
path: root/lldb/packages/Python/lldbsuite
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/packages/Python/lldbsuite')
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile5
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py62
-rw-r--r--lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp32
3 files changed, 99 insertions, 0 deletions
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile
new file mode 100644
index 00000000000..314f1cb2f07
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
new file mode 100644
index 00000000000..83b20438584
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
@@ -0,0 +1,62 @@
+"""
+Make sure if we have two classes with the same base name the
+dynamic value calculator doesn't confuse them
+"""
+
+from __future__ import print_function
+
+
+import os
+import time
+import re
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class RenameThisSampleTestTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ # If your test case doesn't stress debug info, the
+ # set this to true. That way it won't be run once for
+ # each debug info format.
+ NO_DEBUG_INFO_TESTCASE = True
+
+ def test_same_basename_this(self):
+ """Test that the we use the full name to resolve dynamic types."""
+ self.build()
+ self.main_source_file = lldb.SBFileSpec("main.cpp")
+ self.sample_test()
+
+ def setUp(self):
+ # Call super's setUp().
+ TestBase.setUp(self)
+
+ def sample_test(self):
+ (target, process, thread, bkpt) = lldbutil.run_to_source_breakpoint(self,
+ "Break here to get started", self.main_source_file)
+
+ # Set breakpoints in the two class methods and run to them:
+ namesp_bkpt = target.BreakpointCreateBySourceRegex("namesp function did something.", self.main_source_file)
+ self.assertEqual(namesp_bkpt.GetNumLocations(), 1, "Namespace breakpoint invalid")
+
+ virtual_bkpt = target.BreakpointCreateBySourceRegex("Virtual function did something.", self.main_source_file)
+ self.assertEqual(virtual_bkpt.GetNumLocations(), 1, "Virtual breakpoint invalid")
+
+ threads = lldbutil.continue_to_breakpoint(process, namesp_bkpt)
+ self.assertEqual(len(threads), 1, "Didn't stop at namespace breakpoint")
+
+ frame = threads[0].frame[0]
+ namesp_this = frame.FindVariable("this", lldb.eDynamicCanRunTarget)
+ self.assertEqual(namesp_this.GetTypeName(), "namesp::Virtual *", "Didn't get the right dynamic type")
+
+ threads = lldbutil.continue_to_breakpoint(process, virtual_bkpt)
+ self.assertEqual(len(threads), 1, "Didn't stop at virtual breakpoint")
+
+ frame = threads[0].frame[0]
+ virtual_this = frame.FindVariable("this", lldb.eDynamicCanRunTarget)
+ self.assertEqual(virtual_this.GetTypeName(), "Virtual *", "Didn't get the right dynamic type")
+
+
+
diff --git a/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp
new file mode 100644
index 00000000000..38e46c03f41
--- /dev/null
+++ b/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp
@@ -0,0 +1,32 @@
+#include <stdio.h>
+
+namespace namesp
+{
+ class Virtual {
+ public:
+ virtual void doSomething() {
+ printf ("namesp function did something.\n");
+ }
+ };
+}
+
+class Virtual {
+ public:
+ virtual void doSomething() {
+ printf("Virtual function did something.\n");
+ }
+};
+
+int
+main()
+{
+ namesp::Virtual my_outer;
+ Virtual my_virtual;
+
+ // Break here to get started
+ my_outer.doSomething();
+ my_virtual.doSomething();
+
+ return 0;
+}
+
OpenPOWER on IntegriCloud