Name lookup doesn't work properly with Windows targets. This is most likely due to issues with name mangling, although there is at least one set of debug info related issues as well, since some of the name lookup requests appear to be failing on types rather than symbols. Specifically, this patch XFAILS the following set of tests: TestChar1632T.py TestRdar12991846.py TestConstVariables.py TestCallCPPFunction.py TestCallStopAndContinue.py TestCallUserDefinedFunction.py TestCModules.py TestCPPThis.py TestExprs2.py TestOverloadedFunctions.py TestRvalueReferences.py And fixing the underlying issue is tracked in http://llvm.org/pr24489 llvm-svn: 245338
72 lines
2.3 KiB
Python
72 lines
2.3 KiB
Python
"""
|
|
Tests that rvalue references are supported in C++
|
|
"""
|
|
|
|
import lldb
|
|
from lldbtest import *
|
|
import lldbutil
|
|
|
|
class RvalueReferencesTestCase(TestBase):
|
|
|
|
mydir = TestBase.compute_mydir(__file__)
|
|
|
|
@skipUnlessDarwin
|
|
@expectedFailureClang("rdar://problem/11479676")
|
|
@dsym_test
|
|
def test_with_dsym_and_run_command(self):
|
|
"""Test that rvalues are supported in the C++ expression parser"""
|
|
self.buildDsym()
|
|
self.static_method_commands()
|
|
|
|
#rdar://problem/11479676
|
|
@expectedFailureIcc("ICC (13.1, 14-beta) do not emit DW_TAG_rvalue_reference_type.")
|
|
@expectedFailureWindows("llvm.org/pr24489: Name lookup not working correctly on Windows")
|
|
@dwarf_test
|
|
def test_with_dwarf_and_run_command(self):
|
|
"""Test that rvalues are supported in the C++ expression parser"""
|
|
self.buildDwarf()
|
|
self.static_method_commands()
|
|
|
|
def setUp(self):
|
|
TestBase.setUp(self)
|
|
|
|
def set_breakpoint(self, line):
|
|
lldbutil.run_break_set_by_file_and_line (self, "main.cpp", line, num_expected_locations=1, loc_exact=True)
|
|
|
|
def static_method_commands(self):
|
|
"""Test that rvalues are supported in the C++ expression parser"""
|
|
self.runCmd("file a.out", CURRENT_EXECUTABLE_SET)
|
|
|
|
self.set_breakpoint(line_number('main.cpp', '// breakpoint 1'))
|
|
self.set_breakpoint(line_number('main.cpp', '// breakpoint 2'))
|
|
|
|
self.runCmd("process launch", RUN_SUCCEEDED)
|
|
|
|
# Note that clang as of r187480 doesn't emit DW_TAG_const_type, unlike gcc 4.8.1
|
|
# With gcc 4.8.1, lldb reports the type as (int &&const)
|
|
self.expect("frame variable i",
|
|
startstr = "(int &&",
|
|
substrs = ["i = 0x", "&i = 3"])
|
|
|
|
self.expect("expression -- i",
|
|
startstr = "(int) ",
|
|
substrs = ["3"])
|
|
|
|
self.expect("breakpoint delete 1")
|
|
|
|
self.runCmd("process continue")
|
|
|
|
self.expect("expression -- foo(2)")
|
|
|
|
self.expect("expression -- int &&j = 3; foo(j)",
|
|
error = True)
|
|
|
|
self.expect("expression -- int &&k = 6; k",
|
|
startstr = "(int) $1 = 6")
|
|
|
|
if __name__ == '__main__':
|
|
import atexit
|
|
lldb.SBDebugger.Initialize()
|
|
atexit.register(lambda: lldb.SBDebugger.Terminate())
|
|
unittest2.main()
|