New test for llvm.org/pr23478
authorTamas Berghammer <tberghammer@google.com>
Mon, 11 May 2015 14:42:09 +0000 (14:42 +0000)
committerTamas Berghammer <tberghammer@google.com>
Mon, 11 May 2015 14:42:09 +0000 (14:42 +0000)
When there is two brekapoint on two consecutive instruction then
the second breakpoint is ignored by lldb. This test check for the
correct behaviour in this scenario.

Differential revision: http://reviews.llvm.org/D9661

llvm-svn: 236997

lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile [new file with mode: 0644]
lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py [new file with mode: 0644]
lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp [new file with mode: 0644]

diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/Makefile
new file mode 100644 (file)
index 0000000..f89b52a
--- /dev/null
@@ -0,0 +1,9 @@
+LEVEL = ../../../make
+
+CXX_SOURCES := main.cpp
+
+ifneq (,$(findstring icc,$(CC)))
+    CXXFLAGS += -debug inline-debug-info
+endif
+
+include $(LEVEL)/Makefile.rules
diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/TestConsecutiveBreakpoints.py
new file mode 100644 (file)
index 0000000..fe1459f
--- /dev/null
@@ -0,0 +1,78 @@
+"""
+Test continue from a breakpoint when there is a breakpoint on the next instruction also.
+"""
+
+import unittest2
+import lldb, lldbutil
+from lldbtest import *
+
+class ConsecutiveBreakpoitsTestCase(TestBase):
+
+    mydir = TestBase.compute_mydir(__file__)
+
+    @skipUnlessDarwin
+    @dsym_test
+    @unittest2.expectedFailure("llvm.org/pr23478")
+    def test_with_dsym (self):
+        self.buildDsym ()
+        self.consecutive_breakpoints_tests()
+
+    @dwarf_test
+    @unittest2.expectedFailure("llvm.org/pr23478")
+    def test_with_dwarf (self):
+        self.buildDwarf ()
+        self.consecutive_breakpoints_tests()
+
+    def consecutive_breakpoints_tests(self):
+        exe = os.path.join (os.getcwd(), "a.out")
+
+        # Create a target by the debugger.
+        target = self.dbg.CreateTarget(exe)
+        self.assertTrue(target, VALID_TARGET)
+
+        breakpoint = target.BreakpointCreateBySourceRegex("Set breakpoint here", lldb.SBFileSpec("main.cpp"))
+        self.assertTrue(breakpoint and
+                        breakpoint.GetNumLocations() == 1,
+                        VALID_BREAKPOINT)
+
+        # Now launch the process, and do not stop at entry point.
+        process = target.LaunchSimple (None, None, self.get_process_working_directory())
+        self.assertTrue(process, PROCESS_IS_VALID)
+
+        # We should be stopped at the first breakpoint
+        thread = process.GetThreadAtIndex(0)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
+
+        # Step to the next instruction
+        thread.StepInstruction(False)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonPlanComplete)
+        address = thread.GetFrameAtIndex(0).GetPC()
+
+        # Run the process until termination
+        process.Continue()
+
+        # Now launch the process again, and do not stop at entry point.
+        process = target.LaunchSimple (None, None, self.get_process_working_directory())
+        self.assertTrue(process, PROCESS_IS_VALID)
+
+        # We should be stopped at the first breakpoint
+        thread = process.GetThreadAtIndex(0)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
+
+        # Set breakpoint to the next instruction
+        target.BreakpointCreateByAddress(address)
+        process.Continue()
+
+        # We should be stopped at the second breakpoint
+        thread = process.GetThreadAtIndex(0)
+        self.assertEqual(thread.GetStopReason(), lldb.eStopReasonBreakpoint)
+
+        # Run the process until termination
+        process.Continue()
+
+if __name__ == '__main__':
+    import atexit
+    lldb.SBDebugger.Initialize()
+    atexit.register(lambda: lldb.SBDebugger.Terminate())
+    unittest2.main()
+
diff --git a/lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp b/lldb/test/functionalities/breakpoint/consecutive_breakpoins/main.cpp
new file mode 100644 (file)
index 0000000..c1943f0
--- /dev/null
@@ -0,0 +1,19 @@
+//===-- main.cpp ------------------------------------------------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+int
+main(int argc, char const *argv[])
+{
+    int a = 0;
+    int b = 1;
+    a = b + 1; // Set breakpoint here
+    b = a + 1;
+    return 0;
+}
+