54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| Tests that rvalue references are supported in C++
 | |
| """
 | |
| 
 | |
| import lldb
 | |
| from lldbsuite.test.decorators import *
 | |
| from lldbsuite.test.lldbtest import *
 | |
| from lldbsuite.test import lldbutil
 | |
| 
 | |
| 
 | |
| class RvalueReferencesTestCase(TestBase):
 | |
| 
 | |
|     mydir = TestBase.compute_mydir(__file__)
 | |
| 
 | |
|     # rdar://problem/11479676
 | |
|     @expectedFailureAll(
 | |
|         compiler="icc",
 | |
|         bugnumber="ICC (13.1, 14-beta) do not emit DW_TAG_rvalue_reference_type.")
 | |
|     def test_with_run_command(self):
 | |
|         """Test that rvalues are supported in the C++ expression parser"""
 | |
|         self.build()
 | |
|         self.runCmd("file " + self.getBuildArtifact("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")
 | |
| 
 | |
|     def set_breakpoint(self, line):
 | |
|         lldbutil.run_break_set_by_file_and_line(
 | |
|             self, "main.cpp", line, num_expected_locations=1, loc_exact=True)
 |