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
12struct __attribute__((packed)) packed {
13 int x;
14 char y;
15 int z;
16} g_packed_struct;
17static_assert(alignof(packed) == 1);
18static_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
25struct __attribute__((packed, aligned(16))) packed_and_aligned {
26 int x;
27 char y;
28 int z;
29} g_packed_and_aligned_struct;
30static_assert(alignof(packed_and_aligned) == 16);
31static_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
38struct __attribute__((packed)) packed_base { int x; };
39static_assert(alignof(packed_base) == 1);
40
41struct derived : packed, packed_base {} g_derived;
42static_assert(alignof(derived) == 1);
43static_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
50int main() {}
51

source code of lldb/test/Shell/SymbolFile/DWARF/packed.cpp