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