xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/packed.cpp (revision 20c4e95b9c03a77c2e5ce5f354114752d380c591)
1*20c4e95bSVladislav Dzhidzhoev // XFAIL: target-windows
246e848a2SMichael Buch // RUN: %clangxx_host -gdwarf -o %t %s
346e848a2SMichael Buch // RUN: %lldb %t \
446e848a2SMichael Buch // RUN:   -o "expr alignof(packed)" \
546e848a2SMichael Buch // RUN:   -o "expr sizeof(packed)" \
646e848a2SMichael Buch // RUN:   -o "expr alignof(packed_and_aligned)" \
746e848a2SMichael Buch // RUN:   -o "expr sizeof(packed_and_aligned)" \
8ed958445SMichael Buch // RUN:   -o "expr alignof(derived)" \
9ed958445SMichael Buch // RUN:   -o "expr sizeof(derived)" \
1046e848a2SMichael Buch // RUN:   -o exit | FileCheck %s
1146e848a2SMichael Buch 
1246e848a2SMichael Buch struct __attribute__((packed)) packed {
1346e848a2SMichael Buch   int x;
1446e848a2SMichael Buch   char y;
1546e848a2SMichael Buch   int z;
1646e848a2SMichael Buch } g_packed_struct;
1746e848a2SMichael Buch static_assert(alignof(packed) == 1);
1846e848a2SMichael Buch static_assert(sizeof(packed) == 9);
1946e848a2SMichael Buch 
20ed958445SMichael Buch // CHECK:      (lldb) expr alignof(packed)
21ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 1
22ed958445SMichael Buch // CHECK:      (lldb) expr sizeof(packed)
23ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 9
24ed958445SMichael Buch 
2546e848a2SMichael Buch struct __attribute__((packed, aligned(16))) packed_and_aligned {
2646e848a2SMichael Buch   int x;
2746e848a2SMichael Buch   char y;
2846e848a2SMichael Buch   int z;
2946e848a2SMichael Buch } g_packed_and_aligned_struct;
3046e848a2SMichael Buch static_assert(alignof(packed_and_aligned) == 16);
3146e848a2SMichael Buch static_assert(sizeof(packed_and_aligned) == 16);
3246e848a2SMichael Buch 
33ed958445SMichael Buch // CHECK:      (lldb) expr alignof(packed_and_aligned)
34ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 16
35ed958445SMichael Buch // CHECK:      (lldb) expr sizeof(packed_and_aligned)
36ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 16
37ed958445SMichael Buch 
38ed958445SMichael Buch struct __attribute__((packed)) packed_base { int x; };
39ed958445SMichael Buch static_assert(alignof(packed_base) == 1);
40ed958445SMichael Buch 
41ed958445SMichael Buch struct derived : packed, packed_base {} g_derived;
42ed958445SMichael Buch static_assert(alignof(derived) == 1);
43ed958445SMichael Buch static_assert(sizeof(derived) == 13);
44ed958445SMichael Buch 
45ed958445SMichael Buch // CHECK:      (lldb) expr alignof(derived)
46ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 1
47ed958445SMichael Buch // CHECK:      (lldb) expr sizeof(derived)
48ed958445SMichael Buch // CHECK-NEXT: ${{.*}} = 13
49ed958445SMichael Buch 
5046e848a2SMichael Buch int main() {}
51