1b3fc0603e5b64b659bc6a37cc209dc404d3093f4Daniel Dunbar// RUN: %clang_cc1 -triple i386-apple-darwin9 -fsyntax-only -verify %s
28e8fb3be5bd78f0564444eca02b404566a5f3b5dAndy Gibbs// expected-no-diagnostics
3c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
4c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar#include <stddef.h>
5c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
6c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar#pragma options align=mac68k
7c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
8c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbartypedef float __attribute__((vector_size (8))) v2f_t;
9c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbartypedef float __attribute__((vector_size (16))) v4f_t;
10c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
11c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a0_0[__alignof(v2f_t) == 8 ? 1 : -1];
12c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a0_1[__alignof(v4f_t) == 16 ? 1 : -1];
13c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
14c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s1 {
15c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
16c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  int  f1;
17c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
18c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a1_0[offsetof(struct s1, f0) == 0 ? 1 : -1];
19c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a1_1[offsetof(struct s1, f1) == 2 ? 1 : -1];
20c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a1_2[sizeof(struct s1) == 6 ? 1 : -1];
21c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a1_3[__alignof(struct s1) == 2 ? 1 : -1];
22c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
23c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s2 {
24c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
25c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  double f1;
26c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
27c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a2_0[offsetof(struct s2, f0) == 0 ? 1 : -1];
28c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a2_1[offsetof(struct s2, f1) == 2 ? 1 : -1];
29c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a2_2[sizeof(struct s2) == 10 ? 1 : -1];
30c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a2_3[__alignof(struct s2) == 2 ? 1 : -1];
31c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
32c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s3 {
33c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
34c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  v4f_t f1;
35c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
36c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a3_0[offsetof(struct s3, f0) == 0 ? 1 : -1];
37c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a3_1[offsetof(struct s3, f1) == 2 ? 1 : -1];
38c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a3_2[sizeof(struct s3) == 18 ? 1 : -1];
39c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a3_3[__alignof(struct s3) == 2 ? 1 : -1];
40c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
41c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s4 {
42c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
43c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f1;
44c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
45c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a4_0[offsetof(struct s4, f0) == 0 ? 1 : -1];
46c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a4_1[offsetof(struct s4, f1) == 1 ? 1 : -1];
47c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a4_2[sizeof(struct s4) == 2 ? 1 : -1];
48c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a4_3[__alignof(struct s4) == 2 ? 1 : -1];
49c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
50c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s5 {
51c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned f0 : 9;
52c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned f1 : 9;
53c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
54c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a5_0[sizeof(struct s5) == 4 ? 1 : -1];
55c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a5_1[__alignof(struct s5) == 2 ? 1 : -1];
56c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
57c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s6 {
58c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned : 0;
59c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned : 0;
60c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
61c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a6_0[sizeof(struct s6) == 0 ? 1 : -1];
62c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a6_1[__alignof(struct s6) == 2 ? 1 : -1];
63c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
64c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s7 {
65c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char : 1;
66c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned : 1;
67c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
68c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a7_0[sizeof(struct s7) == 2 ? 1 : -1];
69c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a7_1[__alignof(struct s7) == 2 ? 1 : -1];
70c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
71c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s8 {
72c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
73c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned : 1;
74c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
75c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a8_0[sizeof(struct s8) == 2 ? 1 : -1];
76c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a8_1[__alignof(struct s8) == 2 ? 1 : -1];
77c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
78c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s9 {
79c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0[3];
80c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  unsigned : 0;
81c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f1;
82c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
83c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a9_0[sizeof(struct s9) == 6 ? 1 : -1];
84c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a9_1[__alignof(struct s9) == 2 ? 1 : -1];
85c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
86c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s10 {
87c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
88c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
89c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a10_0[sizeof(struct s10) == 2 ? 1 : -1];
90c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a10_1[__alignof(struct s10) == 2 ? 1 : -1];
91c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar
92c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarstruct s11 {
93c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  char f0;
94c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar  v2f_t f1;
95c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbar};
96c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a11_0[offsetof(struct s11, f0) == 0 ? 1 : -1];
97c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a11_1[offsetof(struct s11, f1) == 2 ? 1 : -1];
98c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a11_2[sizeof(struct s11) == 10 ? 1 : -1];
99c6082fe347a414a2e19f2ad8fe41720f10733296Daniel Dunbarextern int a11_3[__alignof(struct s11) == 2 ? 1 : -1];
1003ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman
1013ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman#pragma options align=reset
1023ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman
1033ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedmanvoid f12(void) {
1043ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman  #pragma options align=mac68k
1053ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman  struct s12 {
1063ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman    char f0;
1073ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman    int  f1;
1083ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman  };
1093ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman  #pragma options align=reset
1103ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman  extern int a12[sizeof(struct s12) == 6 ? 1 : -1];
1113ef38eea7ce400718e4ab523b4704ae1fd8f940fEli Friedman}
112