1import lldb 2from lldbsuite.test.decorators import * 3from lldbsuite.test.lldbtest import * 4from lldbsuite.test import lldbutil 5 6 7class TestCase(TestBase): 8 @expectedFailureAll(bugnumber="llvm.org/pr50814", compiler="gcc") 9 def test_constructors(self): 10 self.build() 11 lldbutil.run_to_source_breakpoint( 12 self, "// break here", lldb.SBFileSpec("main.cpp") 13 ) 14 self.expect_expr( 15 "ClassWithImplicitCtor().foo()", result_type="int", result_value="1" 16 ) 17 self.expect_expr( 18 "ClassWithOneCtor(2).value", result_type="int", result_value="2" 19 ) 20 self.expect_expr( 21 "ClassWithMultipleCtor(3).value", result_type="int", result_value="3" 22 ) 23 self.expect_expr( 24 "ClassWithMultipleCtor(3, 1).value", result_type="int", result_value="4" 25 ) 26 27 self.expect_expr( 28 "ClassWithDeletedCtor().value", result_type="int", result_value="6" 29 ) 30 self.expect_expr( 31 "ClassWithDeletedDefaultCtor(7).value", result_type="int", result_value="7" 32 ) 33 34 # FIXME: It seems we try to call the non-existent default constructor here which is wrong. 35 self.expect( 36 "expr ClassWithDefaultedCtor().foo()", 37 error=True, 38 substrs=["Couldn't look up symbols:"], 39 ) 40 41 # FIXME: Calling deleted constructors should fail before linking. 42 self.expect( 43 "expr ClassWithDeletedCtor(1).value", 44 error=True, 45 substrs=["Couldn't look up symbols:"], 46 ) 47 self.expect( 48 "expr ClassWithDeletedDefaultCtor().value", 49 error=True, 50 substrs=["Couldn't look up symbols:", "function", "optimized out"], 51 ) 52 53 @skipIfWindows # Can't find operator new. 54 @skipIfLinux # Fails on some Linux systems with SIGABRT. 55 def test_constructors_new(self): 56 self.build() 57 lldbutil.run_to_source_breakpoint( 58 self, "// break here", lldb.SBFileSpec("main.cpp") 59 ) 60 61 self.expect_expr( 62 "(new ClassWithOneCtor(1))->value; 1", result_type="int", result_value="1" 63 ) 64