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

class C {
  friend class D;
};

class A {
public:
  void f();
};

friend int x; // expected-error {{'friend' used outside of class}}

friend class D {}; // expected-error {{'friend' used outside of class}}

union U {
  int u1;
};

class B {
  // 'A' here should refer to the declaration above.  
  friend class A;

  friend C; // expected-warning {{specify 'class' to befriend}}
  friend U; // expected-warning {{specify 'union' to befriend}}
  friend int; // expected-warning {{non-class friend type 'int'}}

  friend void myfunc();

  void f(A *a) { a->f(); }
};

void bar() {} // expected-note {{previous definition is here}}
class E {
  friend void bar() {} // expected-error {{redefinition of 'bar'}}
};




template <typename t1, typename t2> class some_template;
friend   // expected-error {{'friend' used outside of class}}
some_template<foo, bar>&  // expected-error {{use of undeclared identifier 'foo'}}
  ;  // expected-error {{expected unqualified-id}}
