jingham created this revision.
jingham added a reviewer: JDevlieghere.
jingham requested review of this revision.
Herald added a project: LLDB.
Herald added a subscriber: lldb-commits.

When Jonas made the change to not add demangled names to the name indexes, we 
were worried it might cause breaking on overloaded functions to stop working.  
But that's actually not true, anything that uses the Symbol::LookupInfo to 
search names will do the right thing here, which includes 
SBModule::FindFunctions and the breakpoint by name resolver.  That does the job 
of extracting the base name, finding potential matches, and then comparing the 
demangled name of the match to the input string.  It's still the case that the 
names must match exactly.

Anyway, in the course of proving this to myself I wrote a little test for 
simple overloaded name breakpoints.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D119997

Files:
  lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
  
lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
  lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp


Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp
===================================================================
--- /dev/null
+++ 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<int>(x * x);
+}
+
+int a_function(double x, int y) {
+  return y * y;
+}
+
+int a_function(int x, double y) {
+  return static_cast<int>(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;
+}
Index: 
lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
===================================================================
--- /dev/null
+++ 
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)")
+        
+        
+        
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
===================================================================
--- /dev/null
+++ 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


Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/main.cpp
===================================================================
--- /dev/null
+++ 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<int>(x * x);
+}
+
+int a_function(double x, int y) {
+  return y * y;
+}
+
+int a_function(int x, double y) {
+  return static_cast<int>(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;
+}
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/TestBreakOnOverload.py
===================================================================
--- /dev/null
+++ 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)")
+        
+        
+        
Index: lldb/test/API/functionalities/breakpoint/breakpoint_on_overload/Makefile
===================================================================
--- /dev/null
+++ 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
_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to