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