xref: /llvm-project/lldb/test/Shell/SymbolFile/DWARF/packed.cpp (revision 20c4e95b9c03a77c2e5ce5f354114752d380c591)
1 // XFAIL: target-windows
2 // RUN: %clangxx_host -gdwarf -o %t %s
3 // RUN: %lldb %t \
4 // RUN:   -o "expr alignof(packed)" \
5 // RUN:   -o "expr sizeof(packed)" \
6 // RUN:   -o "expr alignof(packed_and_aligned)" \
7 // RUN:   -o "expr sizeof(packed_and_aligned)" \
8 // RUN:   -o "expr alignof(derived)" \
9 // RUN:   -o "expr sizeof(derived)" \
10 // RUN:   -o exit | FileCheck %s
11 
12 struct __attribute__((packed)) packed {
13   int x;
14   char y;
15   int z;
16 } g_packed_struct;
17 static_assert(alignof(packed) == 1);
18 static_assert(sizeof(packed) == 9);
19 
20 // CHECK:      (lldb) expr alignof(packed)
21 // CHECK-NEXT: ${{.*}} = 1
22 // CHECK:      (lldb) expr sizeof(packed)
23 // CHECK-NEXT: ${{.*}} = 9
24 
25 struct __attribute__((packed, aligned(16))) packed_and_aligned {
26   int x;
27   char y;
28   int z;
29 } g_packed_and_aligned_struct;
30 static_assert(alignof(packed_and_aligned) == 16);
31 static_assert(sizeof(packed_and_aligned) == 16);
32 
33 // CHECK:      (lldb) expr alignof(packed_and_aligned)
34 // CHECK-NEXT: ${{.*}} = 16
35 // CHECK:      (lldb) expr sizeof(packed_and_aligned)
36 // CHECK-NEXT: ${{.*}} = 16
37 
38 struct __attribute__((packed)) packed_base { int x; };
39 static_assert(alignof(packed_base) == 1);
40 
41 struct derived : packed, packed_base {} g_derived;
42 static_assert(alignof(derived) == 1);
43 static_assert(sizeof(derived) == 13);
44 
45 // CHECK:      (lldb) expr alignof(derived)
46 // CHECK-NEXT: ${{.*}} = 1
47 // CHECK:      (lldb) expr sizeof(derived)
48 // CHECK-NEXT: ${{.*}} = 13
49 
50 int main() {}
51