p11.cpp revision 0e2c34f92f00628d48968dfea096d36381f494cb
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'?}} 270e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // expected-note@-1{{'::test2::foo' declared here}} 280e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // TODO: the above note should go on line 24 294e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 304e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 314e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void foo(); // expected-note {{local declaration nearly matches}} 324e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S2 { 334e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); 344e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 354e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 364e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 374e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S2 { 384e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void foo(); // expected-error {{no matching function found in local scope}} 394e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 404e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 414e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 424e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 434e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith int foo; 444e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S3 { 450e2c34f92f00628d48968dfea096d36381f494cbStephen Hines friend void foo(); // expected-error {{no matching function 'foo' found in local scope; did you mean '::test2::foo'?}} 464e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 474e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 484e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 494e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S4 { 504e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} 510e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // expected-note@-1 2 {{'::test2::bar' declared here}} 520e2c34f92f00628d48968dfea096d36381f494cbStephen Hines // TODO: the above two notes should go on line 22 534e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 544e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 554e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { void bar(); } 564e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S5 { 570e2c34f92f00628d48968dfea096d36381f494cbStephen Hines friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} 584e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 594e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 604e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith { 614e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); 624e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S6 { 634e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 644e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 654e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 664e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 674e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S7 { 684e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar() { Inner::f(); } 694e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 704e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 714e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith static void f() {} 724e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 734e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 744e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 754e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); // expected-note {{'bar' declared here}} 764e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S8 { 774e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 784e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 794e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 804e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 814e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 824e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S9 { 834e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner { 844e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void baz(); // expected-error {{no matching function 'baz' found in local scope; did you mean 'bar'?}} 854e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 864e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 874e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 884e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct S10 { 894e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void quux() {} 904e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void foo() { 914e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner1 { 920e2c34f92f00628d48968dfea096d36381f494cbStephen Hines friend void bar(); // expected-error {{no matching function 'bar' found in local scope; did you mean '::test2::bar'?}} 934e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void quux(); // expected-error {{no matching function found in local scope}} 944e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 954e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith 964e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith void bar(); 974e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith struct Inner2 { 984e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith friend void bar(); 994e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 1004e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 1014e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith }; 1024e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith } 1034e9686b1f9947f1747b4f4316deb2087a7f56282Richard Smith} 104