xref: /llvm-project/lldb/test/API/lang/cpp/incomplete-types/TestCppIncompleteTypes.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1import lldb
2from lldbsuite.test.decorators import *
3from lldbsuite.test.lldbtest import *
4from lldbsuite.test import lldbutil
5
6
7class TestCppIncompleteTypes(TestBase):
8    @skipIf(compiler="gcc")
9    def test_limit_debug_info(self):
10        self.build()
11        frame = self.get_test_frame("limit")
12
13        value_f = frame.EvaluateExpression("f")
14        self.assertTrue(value_f.IsValid(), "'expr f' results in a valid SBValue object")
15        self.assertSuccess(value_f.GetError(), "'expr f' is successful")
16
17        value_a = frame.EvaluateExpression("a")
18        self.assertTrue(value_a.IsValid(), "'expr a' results in a valid SBValue object")
19        self.assertSuccess(value_a.GetError(), "'expr a' is successful")
20
21    @skipIf(compiler="gcc")
22    # Clang on Windows asserts in external record layout in this case.
23    @skipIfWindows
24    def test_partial_limit_debug_info(self):
25        self.build()
26        frame = self.get_test_frame("nolimit")
27
28        value_f = frame.EvaluateExpression("f")
29        self.assertTrue(value_f.IsValid(), "'expr f' results in a valid SBValue object")
30        self.assertSuccess(value_f.GetError(), "'expr f' is successful")
31
32        value_a = frame.EvaluateExpression("a")
33        self.assertTrue(value_a.IsValid(), "'expr a' results in a valid SBValue object")
34        self.assertSuccess(value_a.GetError(), "'expr a' is successful")
35
36    def get_test_frame(self, exe):
37        # Get main source file
38        src_file = "main.cpp"
39        src_file_spec = lldb.SBFileSpec(src_file)
40
41        (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(
42            self, "break here", src_file_spec, exe_name=exe
43        )
44        # Get frame for current thread
45        return thread.GetSelectedFrame()
46