1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s 2*67e74705SXin Li struct T { 3*67e74705SXin Li void f(); 4*67e74705SXin Li }; 5*67e74705SXin Li 6*67e74705SXin Li struct A { 7*67e74705SXin Li T* operator->(); // expected-note{{candidate function}} 8*67e74705SXin Li }; 9*67e74705SXin Li 10*67e74705SXin Li struct B { 11*67e74705SXin Li T* operator->(); // expected-note{{candidate function}} 12*67e74705SXin Li }; 13*67e74705SXin Li 14*67e74705SXin Li struct C : A, B { 15*67e74705SXin Li }; 16*67e74705SXin Li 17*67e74705SXin Li struct D : A { }; 18*67e74705SXin Li 19*67e74705SXin Li struct E; // expected-note {{forward declaration of 'E'}} 20*67e74705SXin Li f(C & c,D & d,E & e)21*67e74705SXin Livoid f(C &c, D& d, E& e) { 22*67e74705SXin Li c->f(); // expected-error{{use of overloaded operator '->' is ambiguous}} 23*67e74705SXin Li d->f(); 24*67e74705SXin Li e->f(); // expected-error{{incomplete definition of type}} 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li // rdar://8875304 28*67e74705SXin Li namespace rdar8875304 { 29*67e74705SXin Li class Point {}; Line_Segment(const Point &)30*67e74705SXin Liclass Line_Segment{ public: Line_Segment(const Point&){} }; Location()31*67e74705SXin Liclass Node { public: Point Location(){ Point p; return p; } }; 32*67e74705SXin Li f()33*67e74705SXin Livoid f() 34*67e74705SXin Li { 35*67e74705SXin Li Node** node1; 36*67e74705SXin Li Line_Segment(node1->Location()); // expected-error {{not a structure or union}} 37*67e74705SXin Li } 38*67e74705SXin Li } 39*67e74705SXin Li 40*67e74705SXin Li 41*67e74705SXin Li namespace arrow_suggest { 42*67e74705SXin Li 43*67e74705SXin Li template <typename T> 44*67e74705SXin Li class wrapped_ptr { 45*67e74705SXin Li public: wrapped_ptr(T * ptr)46*67e74705SXin Li wrapped_ptr(T* ptr) : ptr_(ptr) {} operator ->()47*67e74705SXin Li T* operator->() { return ptr_; } 48*67e74705SXin Li void Check(); // expected-note {{'Check' declared here}} 49*67e74705SXin Li private: 50*67e74705SXin Li T *ptr_; 51*67e74705SXin Li }; 52*67e74705SXin Li 53*67e74705SXin Li class Worker { 54*67e74705SXin Li public: 55*67e74705SXin Li void DoSomething(); // expected-note {{'DoSomething' declared here}} 56*67e74705SXin Li void Chuck(); 57*67e74705SXin Li }; 58*67e74705SXin Li test()59*67e74705SXin Livoid test() { 60*67e74705SXin Li wrapped_ptr<Worker> worker(new Worker); 61*67e74705SXin Li worker.DoSomething(); // expected-error {{no member named 'DoSomething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} 62*67e74705SXin Li worker.DoSamething(); // expected-error {{no member named 'DoSamething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} \ 63*67e74705SXin Li // expected-error {{no member named 'DoSamething' in 'arrow_suggest::Worker'; did you mean 'DoSomething'?}} 64*67e74705SXin Li worker.Chuck(); // expected-error {{no member named 'Chuck' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean 'Check'?}} 65*67e74705SXin Li } 66*67e74705SXin Li 67*67e74705SXin Li } // namespace arrow_suggest 68