1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple i686-apple-darwin9 %s -fsyntax-only -verify
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
33b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar
43b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar#include <stddef.h>
53b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar
63b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar#pragma pack(4)
73b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar
83b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar// Baseline
93b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbarstruct s0 {
103b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar  char f0;
113b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar  int  f1;
123b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar};
133b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbarextern int a0[offsetof(struct s0, f1) == 4 ? 1 : -1];
143b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar
153b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar#pragma pack(push, 2)
163b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbarstruct s1 {
173b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar  char f0;
183b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar  int  f1;
193b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar};
203b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbarextern int a1[offsetof(struct s1, f1) == 2 ? 1 : -1];
213b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar#pragma pack(pop)
223b0db908ebd07eaa26bc90deba5e826de00fe515Daniel Dunbar
2379cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar#pragma pack(1)
2479cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarstruct s3_0 {
2579cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  char f0;
2679cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  int f1;
2779cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar};
2879cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar#pragma pack()
2979cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarstruct s3_1 {
3079cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  char f0;
3179cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  int f1;
3279cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar};
3379cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarextern int a3_0[offsetof(struct s3_0, f1) == 1 ? 1 : -1];
3479cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarextern int a3_1[offsetof(struct s3_1, f1) == 4 ? 1 : -1];
3579cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar
3679cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar// pack(0) is like pack()
3779cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar#pragma pack(1)
3879cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarstruct s4_0 {
3979cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  char f0;
4079cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  int f1;
4179cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar};
4279cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar#pragma pack(0)
4379cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarstruct s4_1 {
4479cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  char f0;
4579cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar  int f1;
4679cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbar};
4779cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarextern int a4_0[offsetof(struct s4_0, f1) == 1 ? 1 : -1];
4879cd11620c6f05dbf7bb706744eba354574e8b54Daniel Dunbarextern int a4_1[offsetof(struct s4_1, f1) == 4 ? 1 : -1];
49aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman
50aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedmanvoid f() {
51aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman  #pragma pack(push, 2)
52aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman  struct s5_0 {
53aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman    char f0;
54aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman    struct s2_4_0 {
55aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman      int f0;
56aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman    } f1;
57aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman  };
58aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman  #pragma pack(pop)
59aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman  extern int s5_0[offsetof(struct s5_0, f1) == 2 ? 1 : -1];
60aa5ab26ed93382b812147f532dcbf4afb5494040Eli Friedman}
61