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