brintos

brintos / llvm-project-archived public Read only

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