1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 2a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s 3a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar// RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s 486f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor 586f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorclass X{ 686f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorpublic: 7b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor enum E {Enumerator}; // expected-note 2{{declared here}} 886f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int f(); 986f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor static int mem; 1086f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor static float g(); 1186f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor}; 1286f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor 1386f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorvoid test(X* xp, X x) { 1486f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int i1 = x.f(); 1586f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int i2 = xp->f(); 16b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor x.E; // expected-error{{cannot refer to type member 'E' in 'X' with '.'}} 17b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor xp->E; // expected-error{{cannot refer to type member 'E' in 'X' with '->'}} 1876f7d287020a0b4996d6e9d3968d5bd9a39f7d84Douglas Gregor int i3 = x.Enumerator; 1976f7d287020a0b4996d6e9d3968d5bd9a39f7d84Douglas Gregor int i4 = xp->Enumerator; 2086f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor x.mem = 1; 2186f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor xp->mem = 2; 2286f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor float f1 = x.g(); 2386f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor float f2 = xp->g(); 2486f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor} 25214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor 26214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorstruct A { 27214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor int f0; 28214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor}; 29214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorstruct B { 30214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor A *f0(); 31214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor}; 32214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorint f0(B *b) { 336dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return b->f0->f0; // expected-error{{did you mean to call it with no arguments}} 34214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor} 358d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 368d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregorint i; 378d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 388d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregornamespace C { 398d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor int i; 408d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor} 418d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 428d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregorvoid test2(X *xp) { 438d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor xp->::i = 7; // expected-error{{qualified member access refers to a member in the global namespace}} 448d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor xp->C::i = 7; // expected-error{{qualified member access refers to a member in namespace 'C'}} 458d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor} 46b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 47b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 48b1b425648c4968824a3ef706b8c0ca35e88e8846John McCallnamespace test3 { 49b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamespaceDecl; 50b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 51b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamedDecl { 52b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall void *getIdentifier() const; 53b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall }; 54b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 55b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamespaceDecl : NamedDecl { 56b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall bool isAnonymousNamespace() const { 57b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall return !getIdentifier(); 58b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall } 59b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall }; 60b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall} 612b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 622b147f072b118607aafafd2f05843243abfe4488Douglas Gregornamespace test4 { 632b147f072b118607aafafd2f05843243abfe4488Douglas Gregor class X { 642b147f072b118607aafafd2f05843243abfe4488Douglas Gregor protected: 652b147f072b118607aafafd2f05843243abfe4488Douglas Gregor template<typename T> void f(T); 662b147f072b118607aafafd2f05843243abfe4488Douglas Gregor }; 672b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 682b147f072b118607aafafd2f05843243abfe4488Douglas Gregor class Y : public X { 692b147f072b118607aafafd2f05843243abfe4488Douglas Gregor public: 702b147f072b118607aafafd2f05843243abfe4488Douglas Gregor using X::f; 712b147f072b118607aafafd2f05843243abfe4488Douglas Gregor }; 722b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 732b147f072b118607aafafd2f05843243abfe4488Douglas Gregor void test_f(Y y) { 742b147f072b118607aafafd2f05843243abfe4488Douglas Gregor y.f(17); 752b147f072b118607aafafd2f05843243abfe4488Douglas Gregor } 762b147f072b118607aafafd2f05843243abfe4488Douglas Gregor} 77ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 78ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCallnamespace test5 { 79ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall struct A { 80ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall template <class T> void foo(); 81ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall }; 82ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 83ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test0(int x) { 84c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain x.A::foo<int>(); // expected-error {{'int' is not a structure or union}} 85ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 86ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 87ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test1(A *x) { 88c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain x.A::foo<int>(); // expected-error {{'test5::A *' is a pointer}} 89ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 90ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 91ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test2(A &x) { 9258878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar x->A::foo<int>(); // expected-error {{'test5::A' is not a pointer; did you mean to use '.'?}} 93ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 94ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall} 9512eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor 9612eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregornamespace PR7508 { 9712eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor struct A { 9812eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor struct CleanupScope {}; 99e4c7f90da208ed2caeab784b32f416a50eed8da3Kaelyn Uhrain void PopCleanupBlock(); // expected-note{{'PopCleanupBlock' declared here}} 10012eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor }; 10112eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor 10212eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor void foo(A &a) { 103e4c7f90da208ed2caeab784b32f416a50eed8da3Kaelyn Uhrain a.PopCleanupScope(); // expected-error{{no member named 'PopCleanupScope' in 'PR7508::A'; did you mean 'PopCleanupBlock'?}} 10412eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor } 10512eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor} 1069d4bb946269303996edadffce642301bee87a62fDouglas Gregor 1079d4bb946269303996edadffce642301bee87a62fDouglas Gregornamespace rdar8231724 { 1089d4bb946269303996edadffce642301bee87a62fDouglas Gregor namespace N { 1099d4bb946269303996edadffce642301bee87a62fDouglas Gregor template<typename T> struct X1; 1109d4bb946269303996edadffce642301bee87a62fDouglas Gregor int i; 1119d4bb946269303996edadffce642301bee87a62fDouglas Gregor } 1129d4bb946269303996edadffce642301bee87a62fDouglas Gregor 1139d4bb946269303996edadffce642301bee87a62fDouglas Gregor struct X { }; 1149d4bb946269303996edadffce642301bee87a62fDouglas Gregor struct Y : X { }; 1159d4bb946269303996edadffce642301bee87a62fDouglas Gregor 116d6537015745128064dc12fcc06af65372dfd5da9Richard Smith template<typename T> struct Z { int n; }; 117d6537015745128064dc12fcc06af65372dfd5da9Richard Smith 1189d4bb946269303996edadffce642301bee87a62fDouglas Gregor void f(Y *y) { 1199d4bb946269303996edadffce642301bee87a62fDouglas Gregor y->N::X1<int>; // expected-error{{'rdar8231724::N::X1' is not a member of class 'rdar8231724::Y'}} 120d6537015745128064dc12fcc06af65372dfd5da9Richard Smith y->Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}} 121a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar y->template Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}} 122a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#if __cplusplus <= 199711L // C++03 or earlier modes 123a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar // expected-warning@-2{{'template' keyword outside of a template}} 124a4de17562d13d7a8188108243c4cfbd52f33229aPirama Arumuga Nainar#endif 1259d4bb946269303996edadffce642301bee87a62fDouglas Gregor } 1269d4bb946269303996edadffce642301bee87a62fDouglas Gregor} 12726ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay 12826ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gaynamespace PR9025 { 12926ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay struct S { int x; }; 1306dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun(); // expected-note{{possible target for call}} 1316dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall int fun(int i); // expected-note{{possible target for call}} 13226ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay int g() { 1336dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 13426ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay } 13526ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay 1366dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun2(); // expected-note{{possible target for call}} 1376dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun2(int i); // expected-note{{possible target for call}} 13826ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay int g2() { 1396dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun2.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 14026ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay } 14165b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay 1426dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun3(int i=0); // expected-note{{possible target for call}} 1436dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall int fun3(int i, int j); // expected-note{{possible target for call}} 14465b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay int g3() { 1456dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun3.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 14665b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay } 147fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay 1486dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall template <typename T> S fun4(); // expected-note{{possible target for call}} 149fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay int g4() { 1506dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun4.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it?}} 151fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay } 152c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay 1536dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun5(int i); // expected-note{{possible target for call}} 1546dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun5(float f); // expected-note{{possible target for call}} 155c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay int g5() { 1566dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun5.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it?}} 157c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay } 15826ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay} 159059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman 160059d578c7d45f687a81bcc97ab80404256a5287fEli Friedmannamespace FuncInMemberExpr { 161059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman struct Vec { int size(); }; 162059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec fun1(); 163059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test1() { return fun1.size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 164059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec *fun2(); 165059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test2() { return fun2->size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 166059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec fun3(int x = 0); 167059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test3() { return fun3.size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 168059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman} 1697d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay 1707d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gaynamespace DotForSemiTypo { 1717d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gayvoid f(int i) { 1727d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // If the programmer typo'd '.' for ';', make sure we point at the '.' rather 1737d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // than the "field name" (whatever the first token on the next line happens to 1747d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // be). 1757d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay int j = i. // expected-error {{member reference base type 'int' is not a structure or union}} 1767d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay j = 0; 1777d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay} 1787d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay} 179d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain 180d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrainnamespace PR15045 { 181d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain class Cl0 { 182d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain public: 183d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain int a; 184d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain }; 185d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain 186d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain int f() { 187d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain Cl0 c; 18858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar return c->a; // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; did you mean to use '.'?}} 189baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain } 190baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 191baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain struct bar { 192baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain void func(); // expected-note {{'func' declared here}} 193baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain }; 194baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 195baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain struct foo { 196baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain bar operator->(); // expected-note 2 {{'->' applied to return value of the operator->() declared here}} 197baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain }; 198baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 199baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain template <class T> void call_func(T t) { 200651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines t->func(); // expected-error-re 2 {{member reference type 'PR15045::bar' is not a pointer{{$}}}} \ 201baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // expected-note {{did you mean to use '.' instead?}} 202baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain } 203baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 204baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain void test_arrow_on_non_pointer_records() { 205baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain bar e; 206baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain foo f; 207baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 208baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // Show that recovery has happened by also triggering typo correction 20958878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar e->Func(); // expected-error {{member reference type 'PR15045::bar' is not a pointer; did you mean to use '.'?}} \ 210baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // expected-error {{no member named 'Func' in 'PR15045::bar'; did you mean 'func'?}} 211baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 212baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // Make sure a fixit isn't given in the case that the '->' isn't actually 213baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // the problem (the problem is with the return value of an operator->). 214651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines f->func(); // expected-error-re {{member reference type 'PR15045::bar' is not a pointer{{$}}}} 215baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 216baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain call_func(e); // expected-note {{in instantiation of function template specialization 'PR15045::call_func<PR15045::bar>' requested here}} 217baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 218baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain call_func(f); // expected-note {{in instantiation of function template specialization 'PR15045::call_func<PR15045::foo>' requested here}} 219d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain } 220d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain} 221f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky 222f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewyckynamespace pr16676 { 223f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky struct S { int i; }; 224f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky struct T { S* get_s(); }; 225f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky int f(S* s) { 226f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky T t; 227f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky return t.get_s // expected-error {{reference to non-static member function must be called; did you mean to call it with no arguments?}} 22858878f85ab89b13e9eea4af3ccf055e42c557bc8Pirama Arumuga Nainar .i; // expected-error {{member reference type 'pr16676::S *' is a pointer; did you mean to use '->'}} 229f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky } 230f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky} 231