1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -fms-extensions -verify -triple x86_64-apple-darwin9 %s 2*67e74705SXin Li 3*67e74705SXin Li #pragma ms_struct on 4*67e74705SXin Li 5*67e74705SXin Li #pragma ms_struct off 6*67e74705SXin Li 7*67e74705SXin Li #pragma ms_struct reset 8*67e74705SXin Li 9*67e74705SXin Li #pragma ms_struct // expected-warning {{incorrect use of '#pragma ms_struct on|off' - ignored}} 10*67e74705SXin Li 11*67e74705SXin Li #pragma ms_struct on top of spaghetti // expected-warning {{extra tokens at end of '#pragma ms_struct' - ignored}} 12*67e74705SXin Li 13*67e74705SXin Li struct foo 14*67e74705SXin Li { 15*67e74705SXin Li int a; 16*67e74705SXin Li int b; 17*67e74705SXin Li char c; 18*67e74705SXin Li }; 19*67e74705SXin Li 20*67e74705SXin Li 21*67e74705SXin Li struct { 22*67e74705SXin Li unsigned long bf_1 : 12; 23*67e74705SXin Li unsigned long : 0; 24*67e74705SXin Li unsigned long bf_2 : 12; 25*67e74705SXin Li } __attribute__((__ms_struct__)) t1; 26*67e74705SXin Li 27*67e74705SXin Li struct S { 28*67e74705SXin Li double __attribute__((ms_struct)) d; // expected-warning {{'ms_struct' attribute only applies to struct or union}} 29*67e74705SXin Li unsigned long bf_1 : 12; 30*67e74705SXin Li unsigned long : 0; 31*67e74705SXin Li unsigned long bf_2 : 12; 32*67e74705SXin Li } __attribute__((ms_struct)) t2; 33*67e74705SXin Li 34*67e74705SXin Li enum 35*67e74705SXin Li { 36*67e74705SXin Li A = 0, 37*67e74705SXin Li B, 38*67e74705SXin Li C 39*67e74705SXin Li } __attribute__((ms_struct)) e1; // expected-warning {{'ms_struct' attribute only applies to struct or union}} 40*67e74705SXin Li 41*67e74705SXin Li // rdar://10513599 42*67e74705SXin Li #pragma ms_struct on 43*67e74705SXin Li 44*67e74705SXin Li typedef struct 45*67e74705SXin Li { 46*67e74705SXin Li void *pv; 47*67e74705SXin Li int l; 48*67e74705SXin Li } Foo; 49*67e74705SXin Li 50*67e74705SXin Li typedef struct 51*67e74705SXin Li { 52*67e74705SXin Li void *pv1; 53*67e74705SXin Li Foo foo; 54*67e74705SXin Li unsigned short fInited : 1; 55*67e74705SXin Li void *pv2; 56*67e74705SXin Li } PackOddity; 57*67e74705SXin Li 58*67e74705SXin Li #pragma ms_struct off 59*67e74705SXin Li 60*67e74705SXin Li static int arr[sizeof(PackOddity) == 40 ? 1 : -1]; 61*67e74705SXin Li 62*67e74705SXin Li struct __declspec(ms_struct) bad { // expected-warning {{__declspec attribute 'ms_struct' is not supported}} 63*67e74705SXin Li }; 64