64 lines · python
1import lldb2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5 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