1 // RUN: %clang_cc1 -fsyntax-only -verify %s
2
3 // rdar4641403
4 namespace N {
5 struct X { // expected-note{{candidate found by name lookup}}
6 float b;
7 };
8 }
9
10 using namespace N;
11
12 typedef struct {
13 int a;
14 } X; // expected-note{{candidate found by name lookup}}
15
16
17 struct Y { };
Y(int)18 void Y(int) { }
19
f()20 void f() {
21 X *x; // expected-error{{reference to 'X' is ambiguous}}
22 Y(1); // okay
23 }
24
25 namespace PR17731 {
f()26 void f() {
27 struct S { S() {} };
28 int S(void);
29 int a = S();
30 struct S b;
31 {
32 int S(void);
33 int a = S();
34 struct S c = b;
35 }
36 {
37 struct S { S() {} }; // expected-note {{candidate}}
38 int a = S(); // expected-error {{no viable conversion from 'S'}}
39 struct S c = b; // expected-error {{no viable conversion from 'struct S'}}
40 }
41 }
g()42 void g() {
43 int S(void);
44 struct S { S() {} };
45 int a = S();
46 struct S b;
47 {
48 int S(void);
49 int a = S();
50 struct S c = b;
51 }
52 {
53 struct S { S() {} }; // expected-note {{candidate}}
54 int a = S(); // expected-error {{no viable conversion from 'S'}}
55 struct S c = b; // expected-error {{no viable conversion from 'struct S'}}
56 }
57 }
58
59 struct A {
60 struct B;
61 void f();
62 int B;
63 };
64 struct A::B {};
f()65 void A::f() {
66 B = 123;
67 struct B b;
68 }
69 }
70