1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTests that rvalue references are supported in C++ 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprechtimport lldb 6*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 7*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 8*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 9*99451b44SJordan Rupprecht 10*99451b44SJordan Rupprecht 11*99451b44SJordan Rupprechtclass RvalueReferencesTestCase(TestBase): 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht # rdar://problem/11479676 14*99451b44SJordan Rupprecht @expectedFailureAll( 15*99451b44SJordan Rupprecht compiler="icc", 16*99451b44SJordan Rupprecht bugnumber="ICC (13.1, 14-beta) do not emit DW_TAG_rvalue_reference_type.") 17*99451b44SJordan Rupprecht def test_with_run_command(self): 18*99451b44SJordan Rupprecht """Test that rvalues are supported in the C++ expression parser""" 19*99451b44SJordan Rupprecht self.build() 20*99451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET) 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht self.set_breakpoint(line_number('main.cpp', '// breakpoint 1')) 23*99451b44SJordan Rupprecht self.set_breakpoint(line_number('main.cpp', '// breakpoint 2')) 24*99451b44SJordan Rupprecht 25*99451b44SJordan Rupprecht self.runCmd("process launch", RUN_SUCCEEDED) 26*99451b44SJordan Rupprecht 27*99451b44SJordan Rupprecht # Note that clang as of r187480 doesn't emit DW_TAG_const_type, unlike gcc 4.8.1 28*99451b44SJordan Rupprecht # With gcc 4.8.1, lldb reports the type as (int &&const) 29*99451b44SJordan Rupprecht self.expect("frame variable i", 30*99451b44SJordan Rupprecht startstr="(int &&", 31*99451b44SJordan Rupprecht substrs=["i = 0x", "&i = 3"]) 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht self.expect("expression -- i", 34*99451b44SJordan Rupprecht startstr="(int) ", 35*99451b44SJordan Rupprecht substrs=["3"]) 36*99451b44SJordan Rupprecht 37*99451b44SJordan Rupprecht self.expect("breakpoint delete 1") 38*99451b44SJordan Rupprecht 39*99451b44SJordan Rupprecht self.runCmd("process continue") 40*99451b44SJordan Rupprecht 41*99451b44SJordan Rupprecht self.expect("expression -- foo(2)") 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprecht self.expect("expression -- int &&j = 3; foo(j)", 44*99451b44SJordan Rupprecht error=True) 45*99451b44SJordan Rupprecht 46*99451b44SJordan Rupprecht self.expect("expression -- int &&k = 6; k", 47*99451b44SJordan Rupprecht startstr="(int) $1 = 6") 48*99451b44SJordan Rupprecht 49*99451b44SJordan Rupprecht def set_breakpoint(self, line): 50*99451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 51*99451b44SJordan Rupprecht self, "main.cpp", line, num_expected_locations=1, loc_exact=True) 52