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