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