Check in LLVM r95781.
diff --git a/test/Coverage/c-language-features.inc b/test/Coverage/c-language-features.inc
new file mode 100644
index 0000000..3548132
--- /dev/null
+++ b/test/Coverage/c-language-features.inc
@@ -0,0 +1,190 @@
+//-*- C -*-
+
+/* This is a 
+   multiline comment */
+
+// Intended to exercise all syntactic parts of the C language.
+
+int g0;
+int g1, g2;
+
+struct s0;
+
+struct s0 {
+  int x;
+};
+
+int g3 = 10;
+
+__asm("");
+
+typedef int td0;
+
+td0 g4;
+
+enum e0 {
+  ec0
+};
+
+static void f0(int x) {
+}
+
+inline void f0_0(int x) {
+  ;
+}
+
+extern void f0_1(int x) {
+}
+
+void f1(int, ...);
+
+// Statements.
+void f2() {
+  for (;;) {
+    break;
+    continue;
+  }
+
+  while (0) {
+  }
+
+  do {
+  } while (0);
+
+  void *label = &&theif;
+  goto *label;
+
+  goto theif;
+theif:
+  if (0) {
+    ;
+  } else if (0) {
+  } else {
+  }
+
+  switch(0) {
+  case 0:
+  case 1 ... 2:
+    break;
+  default:
+    break;
+  }
+
+  asm ("nop");
+
+  return;
+}
+
+// Expressions.
+
+#include <stdarg.h>
+
+typedef struct ipair {
+  int first, second;
+} ipair;
+
+void f4(int a0, int a1, int a2, va_list ap) {
+  int t0 = a0 ? a1 : a2;
+  float t1 = (float) a0;
+  ipair t2 = {1, 2};
+  ipair t2a = { .second = 2 };
+  int t3 = sizeof(ipair);
+  ipair t4;
+  t4 = (ipair) {1, 2};
+  extern int g(int);
+  int t5 = g(a0);
+  int t6 = t4.first;
+  int t7[10];
+  int t8 = t7[a0];
+  t8++;
+  const char *t9 = __FUNCTION__;
+  char t10 = 'x';
+  int t11 = __builtin_offsetof(ipair, first);
+  int t12 = __builtin_types_compatible_p(ipair, int);  
+  int t12_0 = __builtin_classify_type(t0);
+  int t12_1 = __builtin_classify_type(t1);
+  int t12_2 = __builtin_classify_type(t2);
+  // FIXME: Add _Complex and aggregate cases.
+  int t13 = va_arg(ap, int);
+  va_list t13_0;
+  va_copy(t13_0, ap);
+  int t14 = __extension__(t13);
+  int t15 = +t13;
+  unsigned t16 = t14 ^ t15;
+  int t17 = t14 % t15;
+  int t17_0 = t16 % t16;
+  float t18;
+  int t19 = t18 ? 0 : 1;
+  char *t20; ++t20; --t20;
+  float t21; ++t21; --t21;
+  double t22; ++t22; --t22;
+  long double t23; ++t23; --t23;
+  int t24 = !t19;
+  int t25 = __real t24;
+  int t26 = __imag t24;
+  const char *t27 = t9;
+  t27 += (unsigned char) 0xFF;
+  t27 += (signed char) 0xFF;
+  
+  struct { char f0[10]; } *t28;
+  int t29 = t28 - t28;
+  char *t30 = &t28->f0[1];
+
+  struct s1 { int f0; };
+  struct s1 t31_a, t31_b;
+  int t31_cond;
+  int t31 = (t31_cond ? t31_a : t31_b).f0;
+
+  _Complex float t32_a, t32_b;
+  int t32_cond;
+  int t32 = __real (t32_cond ? t32_a : t32_b);
+
+  struct { int x, y; } t33, *t34, t35[12], t36(int, float);
+  float t37, *t38, t39[9], t40(double);
+}
+
+// Extended vectors
+
+typedef __attribute__((ext_vector_type(2))) float float2;
+typedef __attribute__((ext_vector_type(4))) float float4;
+
+void f5() {
+  float4 t0 = (float4) { 0, 1, 2, 3 };
+  float4 t1 = t0;
+  t0.lo.even = t1.hi.x;
+
+  // irgen doesn't support this yet.
+#if 0
+  int t2_cond;
+  float2 t2 = (t2_cond ? t0 : t1).lo;
+#endif
+}
+
+void f6() {
+  const char *s0 = __func__;
+  const char *s1 = __FUNCTION__;
+  const char *s2 = __PRETTY_FUNCTION__;
+}
+
+// Arg mismatch with passed type.
+void f7(x) 
+     float x;
+{
+}
+
+void f8(x) 
+     short x;
+{
+}
+
+// Function which inputs an array
+void f9(int x[]) { }
+
+// Object literals.
+void f10() {
+  struct f10_s0 {
+    char iv0[10];
+  } x;
+
+  x = (struct f10_s0) { .iv0 = "name" };
+}