• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // RUN: %clang_cc1 -triple i686-apple-darwin9 %s -fsyntax-only -verify
2 
3 // Check that #pragma pack and #pragma options share the same stack.
4 
5 #pragma pack(push, 1)
6 struct s0 {
7   char c;
8   int x;
9 };
10 extern int a[sizeof(struct s0) == 5 ? 1 : -1];
11 
12 #pragma options align=natural
13 struct s1 {
14   char c;
15   int x;
16 };
17 extern int a[sizeof(struct s1) == 8 ? 1 : -1];
18 
19 #pragma options align=reset
20 #pragma options align=native
21 struct s1_1 {
22   char c;
23   int x;
24 };
25 extern int a[sizeof(struct s1_1) == 8 ? 1 : -1];
26 
27 #pragma pack(pop)
28 struct s2 {
29   char c;
30   int x;
31 };
32 extern int a[sizeof(struct s2) == 5 ? 1 : -1];
33 #pragma pack(pop)
34 
35 struct s3 {
36   char c;
37   int x;
38 };
39 extern int a[sizeof(struct s3) == 8 ? 1 : -1];
40 
41 #pragma pack(push,2)
42 #pragma options align=power
43 struct s4 {
44   char c;
45   int x;
46 };
47 #pragma pack(pop)
48 #pragma options align=reset
49 extern int a[sizeof(struct s4) == 8 ? 1 : -1];
50 
51 /* expected-warning {{#pragma options align=reset failed: stack empty}} */ #pragma options align=reset
52 /* expected-warning {{#pragma pack(pop, ...) failed: stack empty}} */ #pragma pack(pop)
53 
54