1bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman// RUN: %clang_cc1 -triple x86_64-apple-darwin9 %s -fsyntax-only -verify -ffreestanding
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
3bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman// <rdar://problem/10494810> and PR9560
4bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman// Check #pragma pack handling with bitfields.
5bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
6bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman#include <stddef.h>
7bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman#pragma pack(2)
8bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
9bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanstruct s0 {
10bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f1;
11bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned    f2 : 32;
12bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f3;
13bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman};
14bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[sizeof(struct s0) == 6 ? 1 : -1];
15bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
16bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanstruct s1 {
17bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f1;
18bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned       : 0;
19bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f3;
20bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman};
21bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[sizeof(struct s1) == 5 ? 1 : -1];
22bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
23bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanstruct s2 {
24bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f1;
25bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned       : 0;
26bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned    f3 : 8;
27bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f4;
28bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman};
29bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[sizeof(struct s2) == 6 ? 1 : -1];
30bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
31bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanstruct s3 {
32bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f1;
33bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned       : 0;
34bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned    f3 : 16;
35bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f4;
36bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman};
37bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[sizeof(struct s3) == 8 ? 1 : -1];
38bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[offsetof(struct s3, f4) == 6 ? 1 : -1];
39bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman
40bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanstruct s4 {
41bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f1;
42bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     unsigned    f2 : 8;
43bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman     char        f3;
44bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedman};
45bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[sizeof(struct s4) == 4 ? 1 : -1];
46bff22ac1f8b78e4c19d5c3e00226ecea3b24e60fEli Friedmanextern int check[offsetof(struct s4, f3) == 2 ? 1 : -1];
47