xref: /llvm-project/lldb/test/API/lang/cpp/constructors/TestCppConstructors.py (revision 6a35ee8077647b32626c3c41f9d9da4dae6670fc)
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