// RUN: %clang_cc1 -fsyntax-only -verify %s

void test1() {
  if (sizeof (int){ 1}) {}   // sizeof compound literal
  if (sizeof (int)) {}       // sizeof type

  (void)(int)4;   // cast.
  (void)(int){4}; // compound literal.

  int A = (struct{ int a;}){ 1}.a;
}

int test2(int a, int b) {
  return a ? (void)a,b : a;
}

int test3(int a, int b, int c) {
  return a = b = c;
}

int test4() {
  test4();
  return 0;
}

struct X0 { struct { struct { int c[10][9]; } b; } a; };

int test_offsetof() {
  (void)__builtin_offsetof(struct X0, a.b.c[4][5]);
  return 0;
}

void test_sizeof(){
        int arr[10];
        (void)sizeof arr[0];
        (void)sizeof(arr[0]);
        (void)sizeof(arr)[0];
}

// PR3418
int test_leading_extension() {
  __extension__ (*(char*)0) = 1; // expected-warning {{indirection of non-volatile null pointer}} \
                                 // expected-note {{consider using __builtin_trap}}
  return 0;
}

// PR3972
int test5(int);
int test6(void) { 
  return test5(      // expected-note {{to match}}
               test5(1)
                 ; // expected-error {{expected ')'}}
}

// PR8394
void test7() {
    ({} // expected-note {{to match}}
    ;   // expected-error {{expected ')'}}
}

// PR16992
struct pr16992 { int x; };

void func_16992 () {
  int x1 = sizeof int;            // expected-error {{expected parentheses around type name in sizeof expression}}
  int x2 = sizeof struct pr16992; // expected-error {{expected parentheses around type name in sizeof expression}}
  int x3 = __alignof int;         // expected-error {{expected parentheses around type name in __alignof expression}}
  int x4 = _Alignof int;          // expected-error {{expected parentheses around type name in _Alignof expression}}
}

void callee(double, double);
void test8() {
  callee(foobar,   // expected-error {{use of undeclared identifier 'foobar'}}
         fizbin);  // expected-error {{use of undeclared identifier 'fizbin'}}
}
