summaryrefslogtreecommitdiffstats
path: root/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
committerdim <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
commit78b9749c0a4ea980a8b934645da6ae98fcc665e8 (patch)
treedd2a1ddf0476664c2b823409c36cbccd52662ca7 /packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands
parent60cb593f9d55fa5ca7a5372b731f2330345b4b9a (diff)
downloadFreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.zip
FreeBSD-src-78b9749c0a4ea980a8b934645da6ae98fcc665e8.tar.gz
Vendor import of lldb trunk r256945:
https://llvm.org/svn/llvm-project/lldb/trunk@256945
Diffstat (limited to 'packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands')
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/Makefile5
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py84
-rw-r--r--packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/nested.cpp76
3 files changed, 165 insertions, 0 deletions
diff --git a/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/Makefile b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/Makefile
new file mode 100644
index 0000000..1d1f38f
--- /dev/null
+++ b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/Makefile
@@ -0,0 +1,5 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := nested.cpp
+
+include $(LEVEL)/Makefile.rules
diff --git a/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py
new file mode 100644
index 0000000..6c06f37
--- /dev/null
+++ b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py
@@ -0,0 +1,84 @@
+"""
+Test lldb breakpoint command for CPP methods & functions in a namespace.
+"""
+
+from __future__ import print_function
+
+
+
+import os, time
+import lldb
+from lldbsuite.test.lldbtest import *
+
+class CPPBreakpointCommandsTestCase(TestBase):
+
+ mydir = TestBase.compute_mydir(__file__)
+
+ @expectedFailureWindows
+ def test(self):
+ """Test a sequence of breakpoint command add, list, and delete."""
+ self.build()
+ exe = os.path.join(os.getcwd(), "a.out")
+
+ # Create a target from the debugger.
+
+ target = self.dbg.CreateTarget (exe)
+ self.assertTrue(target, VALID_TARGET)
+
+ a_out_module = lldb.SBFileSpecList()
+ a_out_module.Append(lldb.SBFileSpec(exe))
+
+ nested_comp_unit = lldb.SBFileSpecList()
+ nested_comp_unit.Append (lldb.SBFileSpec("nested.cpp"))
+
+ # First provide ONLY the method name. This should get everybody...
+ auto_break = target.BreakpointCreateByName ("Function",
+ lldb.eFunctionNameTypeAuto,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (auto_break.GetNumLocations() == 5)
+
+ # Now add the Baz class specifier. This should get the version contained in Bar,
+ # AND the one contained in ::
+ auto_break = target.BreakpointCreateByName ("Baz::Function",
+ lldb.eFunctionNameTypeAuto,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (auto_break.GetNumLocations() == 2)
+
+ # Then add the Bar::Baz specifier. This should get the version contained in Bar only
+ auto_break = target.BreakpointCreateByName ("Bar::Baz::Function",
+ lldb.eFunctionNameTypeAuto,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (auto_break.GetNumLocations() == 1)
+
+ plain_method_break = target.BreakpointCreateByName ("Function",
+ lldb.eFunctionNameTypeMethod,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (plain_method_break.GetNumLocations() == 3)
+
+ plain_method_break = target.BreakpointCreateByName ("Baz::Function",
+ lldb.eFunctionNameTypeMethod,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (plain_method_break.GetNumLocations() == 2)
+
+ plain_method_break = target.BreakpointCreateByName ("Bar::Baz::Function",
+ lldb.eFunctionNameTypeMethod,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (plain_method_break.GetNumLocations() == 1)
+
+ plain_method_break = target.BreakpointCreateByName ("Function",
+ lldb.eFunctionNameTypeBase,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (plain_method_break.GetNumLocations() == 2)
+
+ plain_method_break = target.BreakpointCreateByName ("Bar::Function",
+ lldb.eFunctionNameTypeBase,
+ a_out_module,
+ nested_comp_unit)
+ self.assertTrue (plain_method_break.GetNumLocations() == 1)
diff --git a/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/nested.cpp b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/nested.cpp
new file mode 100644
index 0000000..29d4b4c
--- /dev/null
+++ b/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/nested.cpp
@@ -0,0 +1,76 @@
+#include <stdio.h>
+
+namespace Foo
+{
+ namespace Bar
+ {
+ class Baz
+ {
+ public:
+ Baz (int value):m_value(value) {}
+ int Function ()
+ {
+ printf ("%s returning: %d.\n", __FUNCTION__, m_value);
+ return m_value;
+ }
+ private:
+ int m_value;
+ };
+
+ class Baz2
+ {
+ public:
+ Baz2 (int value):m_value(value) {}
+ int Function ()
+ {
+ printf ("%s returning: %d.\n", __FUNCTION__, m_value);
+ return m_value;
+ }
+ private:
+ int m_value;
+ };
+
+ static int bar_value = 20;
+ int Function ()
+ {
+ printf ("%s returning: %d.\n", __FUNCTION__, bar_value);
+ return bar_value;
+ }
+ }
+}
+
+class Baz
+{
+public:
+ Baz (int value):m_value(value) {}
+ int Function ()
+ {
+ printf ("%s returning: %d.\n", __FUNCTION__, m_value);
+ return m_value;
+ }
+private:
+ int m_value;
+};
+
+int
+Function ()
+{
+ printf ("I am a global function, I return 333.\n");
+ return 333;
+}
+
+int main ()
+{
+ Foo::Bar::Baz mine(200);
+ Foo::Bar::Baz2 mine2(300);
+ ::Baz bare_baz (500);
+
+ printf ("Yup, got %d from Baz.\n", mine.Function());
+ printf ("Yup, got %d from Baz.\n", mine2.Function());
+ printf ("Yup, got %d from Baz.\n", bare_baz.Function());
+ printf ("And got %d from Bar.\n", Foo::Bar::Function());
+ printf ("And got %d from ::.\n", ::Function());
+
+ return 0;
+
+}
OpenPOWER on IntegriCloud