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

struct X {
  template<typename T, typename U>
  static void f(int, int);
};

void f() {
  void (*ptr)(int, int) = &X::f<int, int>;

  unknown *p = 0; // expected-error {{unknown type name 'unknown'}}
  unknown * p + 0; // expected-error {{undeclared identifier 'unknown'}}
}

auto (*p)() -> int(nullptr);
auto (*q)() -> int(*)(unknown); // expected-error {{unknown type name 'unknown'}}
auto (*r)() -> int(*)(unknown + 1); // expected-error {{undeclared identifier 'unknown'}}

int f(unknown const x); // expected-error {{unknown type name 'unknown'}}

// Disambiguating an array declarator from an array subscripting.
void arr() {
  int x[] = {1}; // expected-note 2{{previous}}

  // This is array indexing not an array declarator because a comma expression
  // is not syntactically a constant-expression.
  int(x[1,1]); // expected-warning 2{{unused}}

  // This is array indexing not an array declaration because a braced-init-list
  // is not syntactically a constant-expression.
  int(x[{0}]); // expected-error {{array subscript is not an integer}}
  struct A {
    struct Q { int n; };
    int operator[](Q);
  } a;
  int(a[{0}]); // expected-warning {{unused}}

  // These are array declarations.
  int(x[(1,1)]); // expected-error {{redefinition}}
  int(x[true ? 1,1 : 1]); // expected-error {{redefinition}}

  int (*_Atomic atomic_ptr_to_int);
  *atomic_ptr_to_int = 42;
}
