120 lines · python
1import lldb2from lldbsuite.test.decorators import *3from lldbsuite.test.lldbtest import *4from lldbsuite.test import lldbutil5 6 7class TestStructuredBinding(TestBase):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(13 self, "// break here", lldb.SBFileSpec("main.cpp")14 )15 16 self.expect_expr(17 "a1",18 result_type="A",19 result_children=[20 ValueCheck(name="x", type="int"),21 ValueCheck(name="y", type="int"),22 ],23 )24 self.expect_expr("b1", result_type="char", result_value="'a'")25 self.expect_expr("c1", result_type="char", result_value="'b'")26 self.expect_expr("d1", result_type="short", result_value="50")27 self.expect_expr("e1", result_type="int", result_value="60")28 self.expect_expr("f1", result_type="char", result_value="'c'")29 30 self.expect_expr(31 "a2",32 result_type="A",33 result_children=[34 ValueCheck(name="x", type="int"),35 ValueCheck(name="y", type="int"),36 ],37 )38 self.expect_expr("b2", result_type="char", result_value="'a'")39 self.expect_expr("c2", result_type="char", result_value="'b'")40 self.expect_expr("d2", result_type="short", result_value="50")41 self.expect_expr("e2", result_type="int", result_value="60")42 self.expect_expr("f2", result_type="char", result_value="'c'")43 44 self.expect_expr(45 "a3",46 result_type="A",47 result_children=[48 ValueCheck(name="x", type="int"),49 ValueCheck(name="y", type="int"),50 ],51 )52 self.expect_expr("b3", result_type="char", result_value="'a'")53 self.expect_expr("c3", result_type="char", result_value="'b'")54 self.expect_expr("d3", result_type="short", result_value="50")55 self.expect_expr("e3", result_type="int", result_value="60")56 self.expect_expr("f3", result_type="char", result_value="'c'")57 58 self.expect_expr("carr_ref1", result_type="char", result_value="'a'")59 self.expect_expr("carr_ref2", result_type="char", result_value="'b'")60 self.expect_expr("carr_ref3", result_type="char", result_value="'c'")61 62 self.expect_expr("sarr_ref1", result_type="short", result_value="11")63 self.expect_expr("sarr_ref2", result_type="short", result_value="12")64 self.expect_expr("sarr_ref3", result_type="short", result_value="13")65 66 self.expect_expr("iarr_ref1", result_type="int", result_value="22")67 self.expect_expr("iarr_ref2", result_type="int", result_value="33")68 self.expect_expr("iarr_ref3", result_type="int", result_value="44")69 70 self.expect_expr("carr_rref1", result_type="char", result_value="'a'")71 self.expect_expr("carr_rref2", result_type="char", result_value="'b'")72 self.expect_expr("carr_rref3", result_type="char", result_value="'c'")73 74 self.expect_expr("sarr_rref1", result_type="short", result_value="11")75 self.expect_expr("sarr_rref2", result_type="short", result_value="12")76 self.expect_expr("sarr_rref3", result_type="short", result_value="13")77 78 self.expect_expr("iarr_rref1", result_type="int", result_value="22")79 self.expect_expr("iarr_rref2", result_type="int", result_value="33")80 self.expect_expr("iarr_rref3", result_type="int", result_value="44")81 82 self.expect_expr("carr_copy1", result_type="char", result_value="'a'")83 self.expect_expr("carr_copy2", result_type="char", result_value="'b'")84 self.expect_expr("carr_copy3", result_type="char", result_value="'c'")85 86 self.expect_expr("sarr_copy1", result_type="short", result_value="11")87 self.expect_expr("sarr_copy2", result_type="short", result_value="12")88 self.expect_expr("sarr_copy3", result_type="short", result_value="13")89 90 self.expect_expr("iarr_copy1", result_type="int", result_value="22")91 self.expect_expr("iarr_copy2", result_type="int", result_value="33")92 self.expect_expr("iarr_copy3", result_type="int", result_value="44")93 94 self.expect_expr("tx1", result_value="4")95 self.expect_expr("ty1", result_value="'z'")96 self.expect_expr("tz1", result_value="10")97 98 self.expect_expr("tx2", result_value="4")99 self.expect_expr("ty2", result_value="'z'")100 self.expect_expr("tz2", result_value="10")101 102 # Older versions of Clang marked structured binding variables103 # as artificial, and thus LLDB wouldn't display them.104 if self.expectedCompiler(["clang"]) and self.expectedCompilerVersion(105 [">=", "22.0"]106 ):107 self.expect(108 "frame variable",109 substrs=[110 "tx1 =",111 "ty1 =",112 "tz1 =",113 "tx2 =",114 "ty2 =",115 "tz2 =",116 "mp1 =",117 "mp2 =",118 ],119 )120