1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlssonstruct T { 3e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson void f(); 4e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson}; 5e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson 6e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlssonstruct A { 7e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson T* operator->(); // expected-note{{candidate function}} 8e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson}; 9e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson 10e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlssonstruct B { 11e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson T* operator->(); // expected-note{{candidate function}} 12e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson}; 13e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson 14e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlssonstruct C : A, B { 15e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson}; 16e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson 17e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlssonstruct D : A { }; 18e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson 197c2342dd4c9947806842e5aca3d2bb2e542853c9John McCallstruct E; // expected-note {{forward declaration of 'E'}} 20f43fb722f6bf048d548659ad326cfb1cfc14420bEli Friedman 21f43fb722f6bf048d548659ad326cfb1cfc14420bEli Friedmanvoid f(C &c, D& d, E& e) { 22e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson c->f(); // expected-error{{use of overloaded operator '->' is ambiguous}} 23e30572ae31b4b1875d7a6d4375b5c6b3a1caf9e3Anders Carlsson d->f(); 24f43fb722f6bf048d548659ad326cfb1cfc14420bEli Friedman e->f(); // expected-error{{incomplete definition of type}} 254fcfde4d5c8f25e40720972a5543d538a0dcb220Daniel Dunbar} 26df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis 27df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis// rdar://8875304 28df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidisnamespace rdar8875304 { 29df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidisclass Point {}; 30df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidisclass Line_Segment{ public: Line_Segment(const Point&){} }; 31df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidisclass Node { public: Point Location(){ Point p; return p; } }; 32df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis 33df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidisvoid f() 34df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis{ 35df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis Node** node1; 36df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis Line_Segment(node1->Location()); // expected-error {{not a structure or union}} 37df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis} 38df8dc5d772d23bb760aeeda374c39001d12e4497Argyrios Kyrtzidis} 392b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 402b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 412b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainnamespace arrow_suggest { 422b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 432b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhraintemplate <typename T> 442b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass wrapped_ptr { 452b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public: 462b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain wrapped_ptr(T* ptr) : ptr_(ptr) {} 472b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain T* operator->() { return ptr_; } 482b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain void Check(); // expected-note {{'Check' declared here}} 492b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain private: 502b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain T *ptr_; 512b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain}; 522b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 532b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass Worker { 542b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public: 552b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain void DoSomething(); 562b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain void Chuck(); 572b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain}; 582b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 592b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainvoid test() { 602b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain wrapped_ptr<Worker> worker(new Worker); 612b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain worker.DoSomething(); // expected-error {{no member named 'DoSomething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} 622b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain worker.DoSamething(); // expected-error {{no member named 'DoSamething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'}} 632b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain worker.Chuck(); // expected-error {{no member named 'Chuck' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean 'Check'?}} 642b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain} 652b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 662b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain} // namespace arrow_suggest 67