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

// rdar://problem/8540720
namespace test0 {
  void foo() {
    void bar();
    class A {
      friend void bar();
    };
  }
}

namespace test1 {
  void foo() {
    class A {
      friend void bar(); // expected-error {{no matching function found in local scope}}
    };
  }
}

namespace test2 {
  void bar(); // expected-note {{'::test2::bar' declared here}}

  void foo() { // expected-note {{'::test2::foo' declared here}}
    struct S1 {
      friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}}
    };

    void foo(); // expected-note {{local declaration nearly matches}}
    struct S2 {
      friend void foo(); // expected-note{{'::test2::foo' declared here}}
      // TODO: the above note should go on line 24
    };

    {
      struct S2 {
        friend void foo(); // expected-error {{no matching function found in local scope}}
      };
    }

    {
      int foo;
      struct S3 {
        friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}}
      };
    }

    struct S4 {
      friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}}
      // expected-note@-1 {{'::test2::bar' declared here}}
      // TODO: the above note should go on line 22
    };

    { void bar(); }
    struct S5 {
      friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}}
    };

    {
      void bar();
      struct S6 {
        friend void bar();
      };
    }

    struct S7 {
      void bar() { Inner::f(); }
      struct Inner {
        friend void bar();
        static void f() {}
      };
    };

    void bar(); // expected-note {{'bar' declared here}}
    struct S8 {
      struct Inner {
        friend void bar();
      };
    };

    struct S9 {
      struct Inner {
        friend void baz(); // expected-error {{no matching function 'baz' found in local scope; did you mean 'bar'?}}
        // expected-note@-1 {{'::test2::bar' declared here}}
        // TODO: the above note should go on line 22
      };
    };

    struct S10 {
      void quux() {}
      void foo() {
        struct Inner1 {
          friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}}
          friend void quux(); // expected-error {{no matching function found in local scope}}
        };

        void bar();
        struct Inner2 {
          friend void bar();
        };
      }
    };
  }
}
