summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename')
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile3
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py58
-rw-r--r--gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp32
3 files changed, 93 insertions, 0 deletions
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile
new file mode 100644
index 00000000000..99998b20bcb
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/Makefile
@@ -0,0 +1,3 @@
+CXX_SOURCES := main.cpp
+
+include Makefile.rules
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
new file mode 100644
index 00000000000..546fd11a1b4
--- /dev/null
+++ b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/TestDynamicValueSameBase.py
@@ -0,0 +1,58 @@
+"""
+Make sure if we have two classes with the same base name the
+dynamic value calculator doesn't confuse them
+"""
+
+
+
+import lldb
+import lldbsuite.test.lldbutil as lldbutil
+from lldbsuite.test.lldbtest import *
+
+
+class DynamicValueSameBaseTestCase(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 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)
+ # Clang specifies the type of this as "T *", gcc as "T * const". This
+ # erases the difference.
+ namesp_type = namesp_this.GetType().GetUnqualifiedType()
+ self.assertEqual(namesp_type.GetName(), "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)
+ virtual_type = virtual_this.GetType().GetUnqualifiedType()
+ self.assertEqual(virtual_type.GetName(), "Virtual *", "Didn't get the right dynamic type")
+
+
+
diff --git a/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp b/gnu/llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/dynamic-value-same-basename/main.cpp
new file mode 100644
index 00000000000..38e46c03f41
--- /dev/null
+++ b/gnu/llvm/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;
+}
+