1*99451b44SJordan Rupprecht""" 2*99451b44SJordan RupprechtTest calling std::String member functions. 3*99451b44SJordan Rupprecht""" 4*99451b44SJordan Rupprecht 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprecht 7*99451b44SJordan Rupprechtimport lldb 8*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 9*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 11*99451b44SJordan Rupprecht 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprechtclass ExprCommandCallFunctionTestCase(TestBase): 14*99451b44SJordan Rupprecht 15*99451b44SJordan Rupprecht mydir = TestBase.compute_mydir(__file__) 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht def setUp(self): 18*99451b44SJordan Rupprecht # Call super's setUp(). 19*99451b44SJordan Rupprecht TestBase.setUp(self) 20*99451b44SJordan Rupprecht # Find the line number to break for main.c. 21*99451b44SJordan Rupprecht self.line = line_number( 22*99451b44SJordan Rupprecht 'main.cpp', 23*99451b44SJordan Rupprecht '// Please test these expressions while stopped at this line:') 24*99451b44SJordan Rupprecht 25*99451b44SJordan Rupprecht @expectedFailureAll( 26*99451b44SJordan Rupprecht compiler="icc", 27*99451b44SJordan Rupprecht bugnumber="llvm.org/pr14437, fails with ICC 13.1") 28*99451b44SJordan Rupprecht @expectedFailureAll(oslist=["windows"], bugnumber="llvm.org/pr21765") 29*99451b44SJordan Rupprecht def test_with(self): 30*99451b44SJordan Rupprecht """Test calling std::String member function.""" 31*99451b44SJordan Rupprecht self.build() 32*99451b44SJordan Rupprecht self.runCmd("file " + self.getBuildArtifact("a.out"), 33*99451b44SJordan Rupprecht CURRENT_EXECUTABLE_SET) 34*99451b44SJordan Rupprecht 35*99451b44SJordan Rupprecht # Some versions of GCC encode two locations for the 'return' statement 36*99451b44SJordan Rupprecht # in main.cpp 37*99451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 38*99451b44SJordan Rupprecht self, "main.cpp", self.line, num_expected_locations=-1, loc_exact=True) 39*99451b44SJordan Rupprecht 40*99451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 41*99451b44SJordan Rupprecht 42*99451b44SJordan Rupprecht self.expect("print str", 43*99451b44SJordan Rupprecht substrs=['Hello world']) 44*99451b44SJordan Rupprecht 45*99451b44SJordan Rupprecht # Calling this function now succeeds, but we follow the typedef return type through to 46*99451b44SJordan Rupprecht # const char *, and thus don't invoke the Summary formatter. 47*99451b44SJordan Rupprecht 48*99451b44SJordan Rupprecht # clang's libstdc++ on ios arm64 inlines std::string::c_str() always; 49*99451b44SJordan Rupprecht # skip this part of the test. 50*99451b44SJordan Rupprecht triple = self.dbg.GetSelectedPlatform().GetTriple() 51*99451b44SJordan Rupprecht do_cstr_test = True 52*99451b44SJordan Rupprecht if triple in ["arm64-apple-ios", "arm64e-apple-ios", "arm64-apple-tvos", "armv7k-apple-watchos", "arm64-apple-bridgeos", "arm64_32-apple-watchos"]: 53*99451b44SJordan Rupprecht do_cstr_test = False 54*99451b44SJordan Rupprecht if do_cstr_test: 55*99451b44SJordan Rupprecht self.expect("print str.c_str()", 56*99451b44SJordan Rupprecht substrs=['Hello world']) 57