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