1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s 286f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor 386f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorclass X{ 486f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorpublic: 5b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor enum E {Enumerator}; // expected-note 2{{declared here}} 686f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int f(); 786f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor static int mem; 886f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor static float g(); 986f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor}; 1086f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor 1186f194083504938df72135b5b66bf0c5cafd9498Douglas Gregorvoid test(X* xp, X x) { 1286f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int i1 = x.f(); 1386f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor int i2 = xp->f(); 14b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor x.E; // expected-error{{cannot refer to type member 'E' in 'X' with '.'}} 15b0fd483ad64865cc0233981cfddc36a7c9795e5eDouglas Gregor xp->E; // expected-error{{cannot refer to type member 'E' in 'X' with '->'}} 1676f7d287020a0b4996d6e9d3968d5bd9a39f7d84Douglas Gregor int i3 = x.Enumerator; 1776f7d287020a0b4996d6e9d3968d5bd9a39f7d84Douglas Gregor int i4 = xp->Enumerator; 1886f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor x.mem = 1; 1986f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor xp->mem = 2; 2086f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor float f1 = x.g(); 2186f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor float f2 = xp->g(); 2286f194083504938df72135b5b66bf0c5cafd9498Douglas Gregor} 23214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor 24214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorstruct A { 25214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor int f0; 26214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor}; 27214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorstruct B { 28214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor A *f0(); 29214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor}; 30214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregorint f0(B *b) { 316dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return b->f0->f0; // expected-error{{did you mean to call it with no arguments}} 32214f31a347d7824eb92e6a3f5dce4d4047fd5ae0Douglas Gregor} 338d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 348d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregorint i; 358d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 368d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregornamespace C { 378d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor int i; 388d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor} 398d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor 408d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregorvoid test2(X *xp) { 418d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor xp->::i = 7; // expected-error{{qualified member access refers to a member in the global namespace}} 428d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor xp->C::i = 7; // expected-error{{qualified member access refers to a member in namespace 'C'}} 438d1c9ae5d27c5190a7793f7ac1224a70cd3df33fDouglas Gregor} 44b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 45b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 46b1b425648c4968824a3ef706b8c0ca35e88e8846John McCallnamespace test3 { 47b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamespaceDecl; 48b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 49b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamedDecl { 50b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall void *getIdentifier() const; 51b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall }; 52b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall 53b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall struct NamespaceDecl : NamedDecl { 54b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall bool isAnonymousNamespace() const { 55b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall return !getIdentifier(); 56b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall } 57b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall }; 58b1b425648c4968824a3ef706b8c0ca35e88e8846John McCall} 592b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 602b147f072b118607aafafd2f05843243abfe4488Douglas Gregornamespace test4 { 612b147f072b118607aafafd2f05843243abfe4488Douglas Gregor class X { 622b147f072b118607aafafd2f05843243abfe4488Douglas Gregor protected: 632b147f072b118607aafafd2f05843243abfe4488Douglas Gregor template<typename T> void f(T); 642b147f072b118607aafafd2f05843243abfe4488Douglas Gregor }; 652b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 662b147f072b118607aafafd2f05843243abfe4488Douglas Gregor class Y : public X { 672b147f072b118607aafafd2f05843243abfe4488Douglas Gregor public: 682b147f072b118607aafafd2f05843243abfe4488Douglas Gregor using X::f; 692b147f072b118607aafafd2f05843243abfe4488Douglas Gregor }; 702b147f072b118607aafafd2f05843243abfe4488Douglas Gregor 712b147f072b118607aafafd2f05843243abfe4488Douglas Gregor void test_f(Y y) { 722b147f072b118607aafafd2f05843243abfe4488Douglas Gregor y.f(17); 732b147f072b118607aafafd2f05843243abfe4488Douglas Gregor } 742b147f072b118607aafafd2f05843243abfe4488Douglas Gregor} 75ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 76ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCallnamespace test5 { 77ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall struct A { 78ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall template <class T> void foo(); 79ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall }; 80ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 81ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test0(int x) { 82c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain x.A::foo<int>(); // expected-error {{'int' is not a structure or union}} 83ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 84ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 85ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test1(A *x) { 86c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain x.A::foo<int>(); // expected-error {{'test5::A *' is a pointer}} 87ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 88ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall 89ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall void test2(A &x) { 90baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain x->A::foo<int>(); // expected-error {{'test5::A' is not a pointer; maybe you meant to use '.'?}} 91ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall } 92ad00b7705f9bbee81beeac428e7c6587734ab5a6John McCall} 9312eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor 9412eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregornamespace PR7508 { 9512eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor struct A { 9612eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor struct CleanupScope {}; 97e4c7f90da208ed2caeab784b32f416a50eed8da3Kaelyn Uhrain void PopCleanupBlock(); // expected-note{{'PopCleanupBlock' declared here}} 9812eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor }; 9912eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor 10012eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor void foo(A &a) { 101e4c7f90da208ed2caeab784b32f416a50eed8da3Kaelyn Uhrain a.PopCleanupScope(); // expected-error{{no member named 'PopCleanupScope' in 'PR7508::A'; did you mean 'PopCleanupBlock'?}} 10212eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor } 10312eb5d6aa882eb247a6c22225b625eee04217105Douglas Gregor} 1049d4bb946269303996edadffce642301bee87a62fDouglas Gregor 1059d4bb946269303996edadffce642301bee87a62fDouglas Gregornamespace rdar8231724 { 1069d4bb946269303996edadffce642301bee87a62fDouglas Gregor namespace N { 1079d4bb946269303996edadffce642301bee87a62fDouglas Gregor template<typename T> struct X1; 1089d4bb946269303996edadffce642301bee87a62fDouglas Gregor int i; 1099d4bb946269303996edadffce642301bee87a62fDouglas Gregor } 1109d4bb946269303996edadffce642301bee87a62fDouglas Gregor 1119d4bb946269303996edadffce642301bee87a62fDouglas Gregor struct X { }; 1129d4bb946269303996edadffce642301bee87a62fDouglas Gregor struct Y : X { }; 1139d4bb946269303996edadffce642301bee87a62fDouglas Gregor 114d6537015745128064dc12fcc06af65372dfd5da9Richard Smith template<typename T> struct Z { int n; }; 115d6537015745128064dc12fcc06af65372dfd5da9Richard Smith 1169d4bb946269303996edadffce642301bee87a62fDouglas Gregor void f(Y *y) { 1179d4bb946269303996edadffce642301bee87a62fDouglas Gregor y->N::X1<int>; // expected-error{{'rdar8231724::N::X1' is not a member of class 'rdar8231724::Y'}} 118d6537015745128064dc12fcc06af65372dfd5da9Richard Smith y->Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}} 119d6537015745128064dc12fcc06af65372dfd5da9Richard Smith y->template Z<int>::n; // expected-error{{'rdar8231724::Z<int>::n' is not a member of class 'rdar8231724::Y'}} \ 120d6537015745128064dc12fcc06af65372dfd5da9Richard Smith // expected-warning{{'template' keyword outside of a template}} 1219d4bb946269303996edadffce642301bee87a62fDouglas Gregor } 1229d4bb946269303996edadffce642301bee87a62fDouglas Gregor} 12326ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay 12426ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gaynamespace PR9025 { 12526ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay struct S { int x; }; 1266dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun(); // expected-note{{possible target for call}} 1276dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall int fun(int i); // expected-note{{possible target for call}} 12826ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay int g() { 1296dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 13026ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay } 13126ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay 1326dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun2(); // expected-note{{possible target for call}} 1336dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun2(int i); // expected-note{{possible target for call}} 13426ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay int g2() { 1356dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun2.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 13626ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay } 13765b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay 1386dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun3(int i=0); // expected-note{{possible target for call}} 1396dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall int fun3(int i, int j); // expected-note{{possible target for call}} 14065b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay int g3() { 1416dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun3.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it with no arguments?}} 14265b34d7bc314c7d4b448164e1a889311bd30b375Matt Beaumont-Gay } 143fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay 1446dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall template <typename T> S fun4(); // expected-note{{possible target for call}} 145fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay int g4() { 1466dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun4.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it?}} 147fbe599465021a37b2275af93466064ba08c06a68Matt Beaumont-Gay } 148c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay 1496dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun5(int i); // expected-note{{possible target for call}} 1506dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall S fun5(float f); // expected-note{{possible target for call}} 151c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay int g5() { 1526dbba4fc128e2e2f5b26be996392bd32c0707f13John McCall return fun5.x; // expected-error{{reference to overloaded function could not be resolved; did you mean to call it?}} 153c9366ba8fff6461a5b7f0fd2626d1bce3e98e629Matt Beaumont-Gay } 15426ae5dd9cfc561527eca418571323d90589a4b92Matt Beaumont-Gay} 155059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman 156059d578c7d45f687a81bcc97ab80404256a5287fEli Friedmannamespace FuncInMemberExpr { 157059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman struct Vec { int size(); }; 158059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec fun1(); 159059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test1() { return fun1.size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 160059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec *fun2(); 161059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test2() { return fun2->size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 162059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman Vec fun3(int x = 0); 163059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman int test3() { return fun3.size(); } // expected-error {{base of member reference is a function; perhaps you meant to call it with no arguments}} 164059d578c7d45f687a81bcc97ab80404256a5287fEli Friedman} 1657d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay 1667d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gaynamespace DotForSemiTypo { 1677d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gayvoid f(int i) { 1687d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // If the programmer typo'd '.' for ';', make sure we point at the '.' rather 1697d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // than the "field name" (whatever the first token on the next line happens to 1707d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay // be). 1717d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay int j = i. // expected-error {{member reference base type 'int' is not a structure or union}} 1727d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay j = 0; 1737d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay} 1747d90fe5a941efc106237d23badec816ed65e267fMatt Beaumont-Gay} 175d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain 176d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrainnamespace PR15045 { 177d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain class Cl0 { 178d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain public: 179d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain int a; 180d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain }; 181d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain 182d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain int f() { 183d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain Cl0 c; 184baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain return c->a; // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; maybe you meant to use '.'?}} 185baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain } 186baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 187baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain struct bar { 188baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain void func(); // expected-note {{'func' declared here}} 189baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain }; 190baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 191baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain struct foo { 192baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain bar operator->(); // expected-note 2 {{'->' applied to return value of the operator->() declared here}} 193baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain }; 194baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 195baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain template <class T> void call_func(T t) { 196651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines t->func(); // expected-error-re 2 {{member reference type 'PR15045::bar' is not a pointer{{$}}}} \ 197baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // expected-note {{did you mean to use '.' instead?}} 198baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain } 199baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 200baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain void test_arrow_on_non_pointer_records() { 201baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain bar e; 202baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain foo f; 203baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 204baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // Show that recovery has happened by also triggering typo correction 205baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain e->Func(); // expected-error {{member reference type 'PR15045::bar' is not a pointer; maybe you meant to use '.'?}} \ 206baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // expected-error {{no member named 'Func' in 'PR15045::bar'; did you mean 'func'?}} 207baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 208baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // Make sure a fixit isn't given in the case that the '->' isn't actually 209baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain // the problem (the problem is with the return value of an operator->). 210651f13cea278ec967336033dd032faef0e9fc2ecStephen Hines f->func(); // expected-error-re {{member reference type 'PR15045::bar' is not a pointer{{$}}}} 211baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 212baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain call_func(e); // expected-note {{in instantiation of function template specialization 'PR15045::call_func<PR15045::bar>' requested here}} 213baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain 214baaeb85f07640794f6a4fabb871e33deeab07df2Kaelyn Uhrain call_func(f); // expected-note {{in instantiation of function template specialization 'PR15045::call_func<PR15045::foo>' requested here}} 215d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain } 216d4224347be04594788fc0f26dff7d2c2cc90851eKaelyn Uhrain} 217f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky 218f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewyckynamespace pr16676 { 219f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky struct S { int i; }; 220f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky struct T { S* get_s(); }; 221f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky int f(S* s) { 222f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky T t; 223f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick 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?}} 224f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky .i; // expected-error {{member reference type 'pr16676::S *' is a pointer; maybe you meant to use '->'}} 225f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky } 226f96df620402f41ce9f1a97c0d286c2b42637d5b9Nick Lewycky} 227