diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile new file mode 100644 --- /dev/null +++ b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile @@ -0,0 +1,4 @@ +CXX_SOURCES := main.cpp +CXXFLAGS_EXTRAS := -std=c++14 + +include Makefile.rules diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py new file mode 100644 --- /dev/null +++ b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py @@ -0,0 +1,32 @@ +""" +Test setting a breakpoint on an overloaded function by name. +""" + +import re +import lldb +from lldbsuite.test.decorators import * +from lldbsuite.test.lldbtest import * +from lldbsuite.test import lldbutil + + +class TestBreakpointOnOverload(TestBase): + + mydir = TestBase.compute_mydir(__file__) + + def check_breakpoint(self, name): + bkpt = self.target.BreakpointCreateByName(name) + self.assertEqual(bkpt.num_locations, 1, "Got one location") + addr = bkpt.locations[0].GetAddress() + self.assertTrue(addr.function.IsValid(), "Got a real function") + self.assertEqual(addr.function.name, name, "Got the right name") + + def test_break_on_overload(self): + self.build() + self.target = lldbutil.run_to_breakpoint_make_target(self) + self.check_breakpoint("a_function(int)") + self.check_breakpoint("a_function(double)") + self.check_breakpoint("a_function(int, double)") + self.check_breakpoint("a_function(double, int)") + + + diff --git a/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp new file mode 100644 --- /dev/null +++ b/lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp @@ -0,0 +1,29 @@ +int a_function(int x) { + return x * x; +} + +int a_function(double x) { + return static_cast(x * x); +} + +int a_function(double x, int y) { + return y * y; +} + +int a_function(int x, double y) { + return static_cast(y * y); +} + +int main(int argc, char const *argv[]) { + // This is a random comment. + + int int_val = 20; + double double_val = 20.0; + + int result = a_function(int_val); + result += a_function(double_val); + result += a_function(double_val, int_val); + result += a_function(int_val, double_val); + + return result; +}