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