Fixed being able to set breakpoints on destructors when we don't fully specify the...
authorGreg Clayton <gclayton@apple.com>
Tue, 12 Apr 2016 22:02:37 +0000 (22:02 +0000)
committerGreg Clayton <gclayton@apple.com>
Tue, 12 Apr 2016 22:02:37 +0000 (22:02 +0000)
(lldb) b ~Foo
(lldb) b Foo::~Foo
(lldb) b Bar::Foo::~Foo

Improved out C++ breakpoint locations tests as well to cover this issue.

<rdar://problem/25577252>

llvm-svn: 266139

lldb/packages/Python/lldbsuite/test/functionalities/breakpoint/cpp/TestCPPBreakpointLocations.py
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

index 8df9ae3..b18bd7a 100644 (file)
@@ -48,15 +48,18 @@ class TestCPPBreakpointLocations(TestBase):
             { 'name' : 'func1', 'loc_names' : [ 'a::c::func1()', 'b::c::func1()'] },
             { 'name' : 'func2', 'loc_names' : [ 'a::c::func2()', 'c::d::func2()'] },
             { 'name' : 'func3', 'loc_names' : [ 'a::c::func3()', 'b::c::func3()', 'c::d::func3()'] },
+            { 'name' : '~c', 'loc_names' : [ 'a::c::~c()', 'b::c::~c()', 'a::c::~c()', 'b::c::~c()'] },
             { 'name' : 'c::func1', 'loc_names' : [ 'a::c::func1()', 'b::c::func1()'] },
             { 'name' : 'c::func2', 'loc_names' : [ 'a::c::func2()'] },
             { 'name' : 'c::func3', 'loc_names' : [ 'a::c::func3()', 'b::c::func3()'] },
+            { 'name' : 'c::~c', 'loc_names' : [ 'a::c::~c()', 'b::c::~c()', 'a::c::~c()', 'b::c::~c()'] },
             { 'name' : 'a::c::func1', 'loc_names' : [ 'a::c::func1()'] },
             { 'name' : 'b::c::func1', 'loc_names' : [ 'b::c::func1()'] },
             { 'name' : 'c::d::func2', 'loc_names' : [ 'c::d::func2()'] },
             { 'name' : 'a::c::func1()', 'loc_names' : [ 'a::c::func1()'] },
             { 'name' : 'b::c::func1()', 'loc_names' : [ 'b::c::func1()'] },
             { 'name' : 'c::d::func2()', 'loc_names' : [ 'c::d::func2()'] },
+            { 'name' : 'c::~c()', 'loc_names' : [ 'a::c::~c()', 'b::c::~c()', 'a::c::~c()', 'b::c::~c()'] },
         ]
         
         for bp_dict in bp_dicts:
index 232470c..829a79e 100644 (file)
@@ -330,7 +330,7 @@ CPlusPlusLanguage::IsCPPMangledName (const char *name)
 bool
 CPlusPlusLanguage::ExtractContextAndIdentifier (const char *name, llvm::StringRef &context, llvm::StringRef &identifier)
 {
-    static RegularExpression g_basename_regex("^(([A-Za-z_][A-Za-z_0-9]*::)*)([A-Za-z_][A-Za-z_0-9]*)$");
+    static RegularExpression g_basename_regex("^(([A-Za-z_][A-Za-z_0-9]*::)*)(~?[A-Za-z_~][A-Za-z_0-9]*)$");
     RegularExpression::Match match(4);
     if (g_basename_regex.Execute (name, &match))
     {