p11.cpp revision 4e9686b1f9947f1747b4f4316deb2087a7f56282
129ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall// RUN: %clang_cc1 -fsyntax-only -verify %s 229ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall 329ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall// rdar://problem/8540720 429ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCallnamespace test0 { 529ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall void foo() { 629ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall void bar(); 729ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall class A { 829ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall friend void bar(); 929ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall }; 1029ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall } 1129ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall} 1229ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall 1329ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCallnamespace test1 { 1429ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall void foo() { 1529ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall class A { 1629ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall friend void bar(); // expected-error {{no matching function found in local scope}} 1729ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall }; 1829ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall } 1929ae6e5fb001deddd831e66faf143ecd9e50f67cJohn McCall} 204e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 214e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smithnamespace test2 { 224e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); // expected-note {{'::test2::bar' declared here}} 234e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 244e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void foo() { // expected-note {{'::test2::foo' declared here}} 254e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S1 { 264e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}} 274e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 284e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 294e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void foo(); // expected-note {{local declaration nearly matches}} 304e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S2 { 314e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); 324e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 334e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 344e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 354e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S2 { 364e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); // expected-error {{no matching function found in local scope}} 374e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 384e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 394e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 404e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 414e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith int foo; 424e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S3 { 434e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); // expected-error {{no matching function found in local scope}} 444e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 454e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 464e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 474e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S4 { 484e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} 494e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 504e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 514e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { void bar(); } 524e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S5 { 534e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); // expected-error {{no matching function found in local scope}} 544e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 554e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 564e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 574e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); 584e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S6 { 594e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 604e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 614e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 624e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 634e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S7 { 644e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar() { Inner::f(); } 654e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 664e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 674e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith static void f() {} 684e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 694e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 704e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 714e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); // expected-note {{'bar' declared here}} 724e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S8 { 734e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 744e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 754e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 764e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 774e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 784e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S9 { 794e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 804e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void baz(); // expected-error {{no matching function 'baz' found in local scope; did you mean 'bar'?}} 814e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 824e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 834e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 844e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S10 { 854e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void quux() {} 864e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void foo() { 874e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner1 { 884e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); // expected-error {{no matching function found in local scope}} 894e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void quux(); // expected-error {{no matching function found in local scope}} 904e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 914e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 924e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); 934e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner2 { 944e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 954e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 964e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 974e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 984e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 994e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith} 100