1import lldb
2from lldbsuite.test.decorators import *
3from lldbsuite.test.lldbtest import *
4from lldbsuite.test import lldbutil
5
6class TestStructuredBinding(TestBase):
7
8    mydir = TestBase.compute_mydir(__file__)
9
10    @skipIf(compiler="clang", compiler_version=['<', '14.0'])
11    def test(self):
12        self.build()
13        lldbutil.run_to_source_breakpoint(self, "// break here", lldb.SBFileSpec("main.cpp"))
14
15        self.expect_expr("a1", result_type="A",
16            result_children=[ValueCheck(name="x", type="int"),
17                             ValueCheck(name="y", type="int")])
18        self.expect_expr("b1", result_type="char", result_value="'a'")
19        self.expect_expr("c1", result_type="char", result_value="'b'")
20        self.expect_expr("d1", result_type="short", result_value="50")
21        self.expect_expr("e1", result_type="int", result_value="60")
22        self.expect_expr("f1", result_type="char", result_value="'c'")
23
24        self.expect_expr("a2", result_type="A",
25            result_children=[ValueCheck(name="x", type="int"),
26                             ValueCheck(name="y", type="int")])
27        self.expect_expr("b2", result_type="char", result_value="'a'")
28        self.expect_expr("c2", result_type="char", result_value="'b'")
29        self.expect_expr("d2", result_type="short", result_value="50")
30        self.expect_expr("e2", result_type="int", result_value="60")
31        self.expect_expr("f2", result_type="char", result_value="'c'")
32
33        self.expect_expr("a3", result_type="A",
34            result_children=[ValueCheck(name="x", type="int"),
35                             ValueCheck(name="y", type="int")])
36        self.expect_expr("b3", result_type="char", result_value="'a'")
37        self.expect_expr("c3", result_type="char", result_value="'b'")
38        self.expect_expr("d3", result_type="short", result_value="50")
39        self.expect_expr("e3", result_type="int", result_value="60")
40        self.expect_expr("f3", result_type="char", result_value="'c'")
41
42        self.expect_expr("carr_ref1", result_type="char", result_value="'a'")
43        self.expect_expr("carr_ref2", result_type="char", result_value="'b'")
44        self.expect_expr("carr_ref3", result_type="char", result_value="'c'")
45
46        self.expect_expr("sarr_ref1", result_type="short", result_value="11")
47        self.expect_expr("sarr_ref2", result_type="short", result_value="12")
48        self.expect_expr("sarr_ref3", result_type="short", result_value="13")
49
50        self.expect_expr("iarr_ref1", result_type="int", result_value="22")
51        self.expect_expr("iarr_ref2", result_type="int", result_value="33")
52        self.expect_expr("iarr_ref3", result_type="int", result_value="44")
53
54        self.expect_expr("carr_rref1", result_type="char", result_value="'a'")
55        self.expect_expr("carr_rref2", result_type="char", result_value="'b'")
56        self.expect_expr("carr_rref3", result_type="char", result_value="'c'")
57
58        self.expect_expr("sarr_rref1", result_type="short", result_value="11")
59        self.expect_expr("sarr_rref2", result_type="short", result_value="12")
60        self.expect_expr("sarr_rref3", result_type="short", result_value="13")
61
62        self.expect_expr("iarr_rref1", result_type="int", result_value="22")
63        self.expect_expr("iarr_rref2", result_type="int", result_value="33")
64        self.expect_expr("iarr_rref3", result_type="int", result_value="44")
65
66        self.expect_expr("carr_copy1", result_type="char", result_value="'a'")
67        self.expect_expr("carr_copy2", result_type="char", result_value="'b'")
68        self.expect_expr("carr_copy3", result_type="char", result_value="'c'")
69
70        self.expect_expr("sarr_copy1", result_type="short", result_value="11")
71        self.expect_expr("sarr_copy2", result_type="short", result_value="12")
72        self.expect_expr("sarr_copy3", result_type="short", result_value="13")
73
74        self.expect_expr("iarr_copy1", result_type="int", result_value="22")
75        self.expect_expr("iarr_copy2", result_type="int", result_value="33")
76        self.expect_expr("iarr_copy3", result_type="int", result_value="44")
77
78        self.expect_expr("tx1", result_type="float", result_value="4")
79        self.expect_expr("ty1", result_type="char", result_value="'z'")
80        self.expect_expr("tz1", result_type="int", result_value="10")
81
82        self.expect_expr("tx2", result_type="float", result_value="4")
83        self.expect_expr("ty2", result_type="char", result_value="'z'")
84        self.expect_expr("tz2", result_type="int", result_value="10")
85