teak-llvm/lldb/packages/Python/lldbsuite/test/lang/cpp/breakpoint-commands/TestCPPBreakpointCommands.py
Jim Ingham 1bf7d30469 Make all the Function implementations different so the compiler won't share them.
Clang on ARM64 was making the three Function methods with identical bodies have
one implementation that was shared.  That threw off the count of breakpoints, since
we don't count as separate locations three functions with the same address.

I also cleaned up the test case while I was at it.

<rdar://problem/27001915>

llvm-svn: 279800
2016-08-26 01:27:50 +00:00

85 lines
2.9 KiB
Python

"""
Test lldb breakpoint command for CPP methods & functions in a namespace.
"""
from __future__ import print_function
import os, time
import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
class CPPBreakpointCommandsTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
@expectedFailureAll(oslist=["windows"])
def make_breakpoint(self, name, type, expected_num_locations):
bkpt = self.target.BreakpointCreateByName (name,
type,
self.a_out_module,
self.nested_comp_unit)
num_locations = bkpt.GetNumLocations()
self.assertTrue (num_locations == expected_num_locations,
"Wrong number of locations for '%s', expected: %d got: %d"%(
name, expected_num_locations, num_locations))
return bkpt
def test_cpp_breakpoint_cmds(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.
self.target = self.dbg.CreateTarget (exe)
self.assertTrue(self.target, VALID_TARGET)
self.a_out_module = lldb.SBFileSpecList()
self.a_out_module.Append(lldb.SBFileSpec(exe))
self.nested_comp_unit = lldb.SBFileSpecList()
self.nested_comp_unit.Append (lldb.SBFileSpec("nested.cpp"))
# First provide ONLY the method name. This should get everybody...
self.make_breakpoint("Function",
lldb.eFunctionNameTypeAuto,
5)
# Now add the Baz class specifier. This should get the version contained in Bar,
# AND the one contained in ::
self.make_breakpoint("Baz::Function",
lldb.eFunctionNameTypeAuto,
2)
# Then add the Bar::Baz specifier. This should get the version contained in Bar only
self.make_breakpoint("Bar::Baz::Function",
lldb.eFunctionNameTypeAuto,
1)
self.make_breakpoint("Function",
lldb.eFunctionNameTypeMethod,
3)
self.make_breakpoint("Baz::Function",
lldb.eFunctionNameTypeMethod,
2)
self.make_breakpoint("Bar::Baz::Function",
lldb.eFunctionNameTypeMethod,
1)
self.make_breakpoint("Function",
lldb.eFunctionNameTypeBase,
2)
self.make_breakpoint("Bar::Function",
lldb.eFunctionNameTypeBase,
1)