]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/Coverage/c-language-features.inc
Vendor import of clang RELEASE_360/rc1 tag r226102 (effectively, 3.6.0 RC1):
[FreeBSD/FreeBSD.git] / test / Coverage / c-language-features.inc
1 //-*- C -*-
2
3 /* This is a 
4    multiline comment */
5
6 // Intended to exercise all syntactic parts of the C language.
7
8 int g0;
9 int g1, g2;
10
11 struct s0;
12
13 struct s0 {
14   int x;
15 };
16
17 int g3 = 10;
18
19 __asm("");
20
21 typedef int td0;
22
23 td0 g4;
24
25 enum e0 {
26   ec0
27 };
28
29 static void f0(int x) {
30 }
31
32 inline void f0_0(int x) {
33   ;
34 }
35
36 extern void f0_1(int x) {
37 }
38
39 void f1(int, ...);
40
41 // Statements.
42 void f2() {
43   for (;;) {
44     break;
45     continue;
46   }
47
48   while (0) {
49   }
50
51   do {
52   } while (0);
53
54   void *label = &&theif;
55   goto *label;
56
57   goto theif;
58 theif:
59   if (0) {
60     ;
61   } else if (0) {
62   } else {
63   }
64
65   switch(0) {
66   case 0:
67   case 1 ... 2:
68     break;
69   default:
70     break;
71   }
72
73   asm ("nop");
74
75   return;
76 }
77
78 // Expressions.
79
80 #include <stdarg.h>
81
82 typedef struct ipair {
83   int first, second;
84 } ipair;
85
86 void f4(int a0, int a1, int a2, va_list ap) {
87   int t0 = a0 ? a1 : a2;
88   float t1 = (float) a0;
89   ipair t2 = {1, 2};
90   ipair t2a = { .second = 2 };
91   int t3 = sizeof(ipair);
92   ipair t4;
93   t4 = (ipair) {1, 2};
94   extern int g(int);
95   int t5 = g(a0);
96   int t6 = t4.first;
97   int t7[10];
98   int t8 = t7[a0];
99   t8++;
100   const char *t9 = __FUNCTION__;
101   char t10 = 'x';
102   int t11 = __builtin_offsetof(ipair, first);
103   int t12 = __builtin_types_compatible_p(ipair, int);  
104   int t12_0 = __builtin_classify_type(t0);
105   int t12_1 = __builtin_classify_type(t1);
106   int t12_2 = __builtin_classify_type(t2);
107   // FIXME: Add _Complex and aggregate cases.
108   int t13 = va_arg(ap, int);
109   va_list t13_0;
110   va_copy(t13_0, ap);
111   int t14 = __extension__(t13);
112   int t15 = +t13;
113   unsigned t16 = t14 ^ t15;
114   int t17 = t14 % t15;
115   int t17_0 = t16 % t16;
116   float t18;
117   int t19 = t18 ? 0 : 1;
118   char *t20; ++t20; --t20;
119   float t21; ++t21; --t21;
120   double t22; ++t22; --t22;
121   long double t23; ++t23; --t23;
122   int t24 = !t19;
123   int t25 = __real t24;
124   int t26 = __imag t24;
125   const char *t27 = t9;
126   t27 += (unsigned char) 0xFF;
127   t27 += (signed char) 0xFF;
128   
129   struct { char f0[10]; } *t28;
130   int t29 = t28 - t28;
131   char *t30 = &t28->f0[1];
132
133   struct s1 { int f0; };
134   struct s1 t31_a, t31_b;
135   int t31_cond;
136   int t31 = (t31_cond ? t31_a : t31_b).f0;
137
138   _Complex float t32_a, t32_b;
139   int t32_cond;
140   int t32 = __real (t32_cond ? t32_a : t32_b);
141
142   struct { int x, y; } t33, *t34, t35[12], t36(int, float);
143   float t37, *t38, t39[9], t40(double);
144 }
145
146 // Extended vectors
147
148 typedef __attribute__((ext_vector_type(2))) float float2;
149 typedef __attribute__((ext_vector_type(4))) float float4;
150
151 void f5() {
152   float4 t0 = (float4) { 0, 1, 2, 3 };
153   float4 t1 = t0;
154   t0.lo.even = t1.hi.x;
155
156   // irgen doesn't support this yet.
157 #if 0
158   int t2_cond;
159   float2 t2 = (t2_cond ? t0 : t1).lo;
160 #endif
161 }
162
163 void f6() {
164   const char *s0 = __func__;
165   const char *s1 = __FUNCTION__;
166   const char *s2 = __PRETTY_FUNCTION__;
167 }
168
169 // Arg mismatch with passed type.
170 void f7(x) 
171      float x;
172 {
173 }
174
175 void f8(x) 
176      short x;
177 {
178 }
179
180 // Function which inputs an array
181 void f9(int x[]) { }
182
183 // Object literals.
184 void f10() {
185   struct f10_s0 {
186     char iv0[10];
187   } x;
188
189   x = (struct f10_s0) { .iv0 = "name" };
190 }
191
192 // Nested structures.
193 struct s11 {
194   struct s11_2 {
195     int f0;
196   } f0;
197   int f1;
198 };
199
200 // Unnamed structures.
201 struct s12 {
202   struct {
203     unsigned char aa;
204     unsigned char bb;
205   };
206 };
207
208 void f11() {
209   struct s12 var = { .aa = 33 };
210 }