16e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: %clang_cc1 -pedantic -Wall -Wno-comment -verify -fcxx-exceptions -x c++ %s 296e7813f08c6adf1d8657b0da86741b54e850fd7Rafael Espindola// RUN: not %clang_cc1 -fsyntax-only -fdiagnostics-parseable-fixits -x c++ %s 2>&1 | FileCheck %s 3ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky// RUN: cp %s %t 46e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: not %clang_cc1 -pedantic -Wall -Wno-comment -fcxx-exceptions -fixit -x c++ %t 56e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror -Wno-comment -fcxx-exceptions -x c++ %t 69b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 79b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor/* This is a test of the various code modification hints that are 8fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor provided as part of warning or extension diagnostics. All of the 9fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor warnings will be fixed by -fixit, and the resulting file should 10fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor compile cleanly with -Werror -pedantic. */ 119b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 12ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewyckystruct C1 { 13a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor virtual void f(); 14a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor static void g(); 15a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor}; 169b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregorstruct C2 : virtual public virtual C1 { }; // expected-error{{duplicate}} 179b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 18a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorvirtual void C1::f() { } // expected-error{{'virtual' can only be specified inside the class definition}} 19a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 20a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstatic void C1::g() { } // expected-error{{'static' can only be specified inside the class definition}} 21a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 22a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregortemplate<int Value> struct CT { }; // expected-note{{previous use is here}} 239b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 249b3064b55f3c858923734e8b1c9831777fc22554Douglas GregorCT<10 >> 2> ct; // expected-warning{{require parentheses}} 25a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 26a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorclass C3 { 27a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorpublic: 28a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor C3(C3, int i = 0); // expected-error{{copy constructor must pass its first argument by reference}} 29a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor}; 30a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 31a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstruct CT<0> { }; // expected-error{{'template<>'}} 32a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 3398e13eac132c16466b75af3fd2365be09130e9d6Richard Smithtemplate<> union CT<1> { }; // expected-error{{tag type}} 34ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson 3528485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor// Access declarations 3628485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass A { 3728485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorprotected: 3828485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor int foo(); 3928485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor}; 40ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson 4128485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass B : public A { 4228485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor A::foo; // expected-warning{{access declarations are deprecated}} 4328485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor}; 442eef829b19bdc59976a827fa39b409440e352bffDouglas Gregor 4598e13eac132c16466b75af3fd2365be09130e9d6Richard Smithvoid f() throw(); // expected-note{{previous}} 462eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid f(); // expected-warning{{missing exception specification}} 471aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor 481aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregornamespace rdar7853795 { 491aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor struct A { 501aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor bool getNumComponents() const; // expected-note{{declared here}} 51ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky void dump() const { 521aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor getNumComponenets(); // expected-error{{use of undeclared identifier 'getNumComponenets'; did you mean 'getNumComponents'?}} 531aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor } 541aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor }; 551aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor} 56b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 57b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregornamespace rdar7796492 { 58f5485125ae70644c76b64ed3ff8a1c5fda937a82Benjamin Kramer struct A { int x, y; A(); }; 59b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 60b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor A::A() 61b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor : x(1) y(2) { // expected-error{{missing ',' between base or member initializers}} 62b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor } 63b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 64b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor} 65a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif 66c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet// extra qualification on member 67c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichetclass C { 6875379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor int C::foo(); // expected-error {{extra qualification}} 69c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet}; 70c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet 71a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisnamespace rdar8488464 { 72fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x = 0; 73fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 74fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 75fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 76fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 77fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 78fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 79fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 80fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 81fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 82fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 83fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 84fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 85fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 86fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 87a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis 88a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisvoid f() { 89fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x = 0; 90a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis (void)x; 91fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 92fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x1; 93fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 94fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x2; 95fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 96fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x3; 97fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 98fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x4; 99fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 100fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x5; 101fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 102fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x6; 103fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 104fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x7; 105fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 106fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x8; 107fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 108fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x9; 109fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 110fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x10; 111fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 112fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x11; 113fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 114fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x12; 115fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 116fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x13; 117fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 118fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x14; 119fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x = 0) { (void)x; } 120fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x1 &= 0) { (void)x1; } // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 121fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x2 *= 0) { (void)x2; } // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 122fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x3 += 0) { (void)x3; } // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 123fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x4 -= 0) { (void)x4; } // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 124fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x5 != 0) { (void)x5; } // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 125fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x6 /= 0) { (void)x6; } // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 126fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x7 %= 0) { (void)x7; } // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 127fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x8 <= 0) { (void)x8; } // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 128fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x9 <<= 0) { (void)x9; } // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 129fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x10 >= 0) { (void)x10; } // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 130fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x11 >>= 0) { (void)x11; } // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 131fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x12 ^= 0) { (void)x12; } // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 132fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x13 |= 0) { (void)x13; } // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 133fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x14 == 0) { (void)x14; } // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 134a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis} 135a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis} 136a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis 1374147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class A> 1384147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F1 { 1394147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetpublic: 1404147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet template <int B> 1414147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet class Iterator { 1424147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet }; 1434147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet}; 1444147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1454147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate<class T> 1464147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F2 { 1474147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet typename F1<T>:: /*template*/ Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}} 1484147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet}; 1494147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1504147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class T> 1514147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetvoid f(){ 1524147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet typename F1<T>:: /*template*/ Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}} 1534147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet} 1544147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1556722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// Tests for &/* fixits radar 7113438. 1566722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass AD {}; 1576722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass BD: public AD {}; 1586722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks 1596722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid test (BD &br) { 1606722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks AD* aPtr; 1616722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks BD b; 1626722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks aPtr = b; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} 16398e13eac132c16466b75af3fd2365be09130e9d6Richard Smith aPtr = br; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} 1646722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks} 1656722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks 166d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo1() const {} // expected-error {{non-member function cannot have 'const' qualifier}} 167d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo2() volatile {} // expected-error {{non-member function cannot have 'volatile' qualifier}} 168d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo3() const volatile {} // expected-error {{non-member function cannot have 'const volatile' qualifier}} 1694147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1700706df40064d4d7559b4304af79d519033414b84Richard Smithstruct S { void f(int, char); }; 1710706df40064d4d7559b4304af79d519033414b84Richard Smithint itsAComma, 1720706df40064d4d7559b4304af79d519033414b84Richard SmithitsAComma2 = 0, 17398e13eac132c16466b75af3fd2365be09130e9d6Richard SmithoopsAComma(42), // expected-error {{expected ';' at end of declaration}} 1740706df40064d4d7559b4304af79d519033414b84Richard SmithAD oopsMoreCommas() { 17598e13eac132c16466b75af3fd2365be09130e9d6Richard Smith static int n = 0, // expected-error {{expected ';' at end of declaration}} 1760706df40064d4d7559b4304af79d519033414b84Richard Smith static char c, 17798e13eac132c16466b75af3fd2365be09130e9d6Richard Smith &d = c, // expected-error {{expected ';' at end of declaration}} 17898e13eac132c16466b75af3fd2365be09130e9d6Richard Smith S s, // expected-error {{expected ';' at end of declaration}} 1790706df40064d4d7559b4304af79d519033414b84Richard Smith s.f(n, d); 18098e13eac132c16466b75af3fd2365be09130e9d6Richard Smith AD ad, // expected-error {{expected ';' at end of declaration}} 1810706df40064d4d7559b4304af79d519033414b84Richard Smith return ad; 1820706df40064d4d7559b4304af79d519033414b84Richard Smith} 1831c94c16317c1a35c1549e022958188eea2567089Richard Smithstruct MoreAccidentalCommas { 1841c94c16317c1a35c1549e022958188eea2567089Richard Smith int a : 5, 1851c94c16317c1a35c1549e022958188eea2567089Richard Smith b : 7, 1861c94c16317c1a35c1549e022958188eea2567089Richard Smith : 4, // expected-error {{expected ';' at end of declaration}} 1871c94c16317c1a35c1549e022958188eea2567089Richard Smith char c, // expected-error {{expected ';' at end of declaration}} 1881c94c16317c1a35c1549e022958188eea2567089Richard Smith double d, // expected-error {{expected ';' at end of declaration}} 1891c94c16317c1a35c1549e022958188eea2567089Richard Smith MoreAccidentalCommas *next, // expected-error {{expected ';' at end of declaration}} 1901c94c16317c1a35c1549e022958188eea2567089Richard Smithpublic: 1911c94c16317c1a35c1549e022958188eea2567089Richard Smith int k, // expected-error {{expected ';' at end of declaration}} 1921c94c16317c1a35c1549e022958188eea2567089Richard Smith friend void f(MoreAccidentalCommas) {} 1931c94c16317c1a35c1549e022958188eea2567089Richard Smith int k2, // expected-error {{expected ';' at end of declaration}} 1941c94c16317c1a35c1549e022958188eea2567089Richard Smith virtual void g(), // expected-error {{expected ';' at end of declaration}} 1951c94c16317c1a35c1549e022958188eea2567089Richard Smith}; 196874d253668f9ed183ca409cdff9d424925ee7800Richard Smith 1976e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> struct Mystery; 1986e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> typedef Mystery<T>::type getMysteriousThing() { // \ 1996e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith expected-error {{function definition declared 'typedef'}} \ 2006e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith expected-error {{missing 'typename' prior to dependent}} 2016e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith return Mystery<T>::get(); 2026e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith} 203460ef136eb96b879f149c8703938a13c35b4bc68David Blaikie 204673720d8cfbc8c9d08faec2817f1e1452e4ecc2eDavid Blaikietemplate<template<typename> Foo, // expected-error {{template template parameter requires 'class' after the parameter list}} 205673720d8cfbc8c9d08faec2817f1e1452e4ecc2eDavid Blaikie template<typename> typename Bar, // expected-error {{template template parameter requires 'class' after the parameter list}} 206673720d8cfbc8c9d08faec2817f1e1452e4ecc2eDavid Blaikie template<typename> struct Baz> // expected-error {{template template parameter requires 'class' after the parameter list}} 207460ef136eb96b879f149c8703938a13c35b4bc68David Blaikievoid func(); 208434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain 209434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainnamespace ShadowedTagType { 210434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainclass Foo { 211434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain public: 212434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain enum Bar { X, Y }; 213434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain void SetBar(Bar bar); 214392b3f5798a62fe038082df0a5e2244b08b917d8Kaelyn Uhrain Bar Bar(); // expected-note 2 {{enum 'Bar' is hidden by a non-type declaration of 'Bar' here}} 215434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain private: 216434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain Bar bar_; // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}} 217434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain}; 218434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainvoid Foo::SetBar(Bar bar) { bar_ = bar; } // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}} 2191e77b65b4819bc7a809245b12bd00450b4924025Kaelyn Uhrain} 2202b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 2212c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikie#define NULL __null 2222c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikiechar c = NULL; // expected-warning {{implicit conversion of NULL constant to 'char'}} 223b26331b4ff419b22861b0823daf83bc8f22a6803David Blaikiedouble dbl = NULL; // expected-warning {{implicit conversion of NULL constant to 'double'}} 2242c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikie 2252b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainnamespace arrow_suggest { 2262b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 2272b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhraintemplate <typename T> 2282b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass wrapped_ptr { 2292b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public: 2302b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain wrapped_ptr(T* ptr) : ptr_(ptr) {} 2312b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain T* operator->() { return ptr_; } 2322b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain private: 2332b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain T *ptr_; 2342b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain}; 2352b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 2362b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass Worker { 2372b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public: 2382b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain void DoSomething(); 2392b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain}; 2402b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 2412b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainvoid test() { 2422b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain wrapped_ptr<Worker> worker(new Worker); 2432b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain worker.DoSomething(); // expected-error {{no member named 'DoSomething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}} 2442b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain} 2452b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain 2462b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain} // namespace arrow_suggest 247b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain 248b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain// Make sure fixing namespace-qualified identifiers functions properly with 249b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain// namespace-aware typo correction/ 250b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace redecl_typo { 251b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace Foo { 252b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain void BeEvil(); // expected-note {{'BeEvil' declared here}} 253b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain} 254b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace Bar { 255b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain namespace Foo { 256b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain bool isGood(); // expected-note {{'Bar::Foo::isGood' declared here}} 257b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain void beEvil(); 258b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain } 259b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain} 260b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainbool Foo::isGood() { // expected-error {{out-of-line definition of 'isGood' does not match any declaration in namespace 'redecl_typo::Foo'; did you mean 'Bar::Foo::isGood'?}} 261b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain return true; 262b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain} 263b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainvoid Foo::beEvil() {} // expected-error {{out-of-line definition of 'beEvil' does not match any declaration in namespace 'redecl_typo::Foo'; did you mean 'BeEvil'?}} 264b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain} 26519a2702042b7e3ee838cca458b35f607111a3897Richard Smith 26619a2702042b7e3ee838cca458b35f607111a3897Richard Smith// Test behavior when a template-id is ended by a token which starts with '>'. 26719a2702042b7e3ee838cca458b35f607111a3897Richard Smithnamespace greatergreater { 26819a2702042b7e3ee838cca458b35f607111a3897Richard Smith template<typename T> struct S { S(); S(T); }; 26919a2702042b7e3ee838cca458b35f607111a3897Richard Smith void f(S<int>=0); // expected-error {{a space is required between a right angle bracket and an equals sign (use '> =')}} 27019a2702042b7e3ee838cca458b35f607111a3897Richard Smith 27119a2702042b7e3ee838cca458b35f607111a3897Richard Smith // FIXME: The fix-its here overlap so -fixit mode can't apply the second one. 27219a2702042b7e3ee838cca458b35f607111a3897Richard Smith //void f(S<S<int>>=S<int>()); 27319a2702042b7e3ee838cca458b35f607111a3897Richard Smith 27419a2702042b7e3ee838cca458b35f607111a3897Richard Smith struct Shr { 27519a2702042b7e3ee838cca458b35f607111a3897Richard Smith template<typename T> Shr(T); 27619a2702042b7e3ee838cca458b35f607111a3897Richard Smith template<typename T> void operator >>=(T); 27719a2702042b7e3ee838cca458b35f607111a3897Richard Smith }; 27819a2702042b7e3ee838cca458b35f607111a3897Richard Smith 27919a2702042b7e3ee838cca458b35f607111a3897Richard Smith template<template<typename>> struct TemplateTemplateParam; // expected-error {{requires 'class'}} 28019a2702042b7e3ee838cca458b35f607111a3897Richard Smith 28119a2702042b7e3ee838cca458b35f607111a3897Richard Smith template<typename T> void t(); 28219a2702042b7e3ee838cca458b35f607111a3897Richard Smith void g() { 28319a2702042b7e3ee838cca458b35f607111a3897Richard Smith void (*p)() = &t<int>; 28419a2702042b7e3ee838cca458b35f607111a3897Richard Smith (void)(&t<int>==p); // expected-error {{use '> ='}} 28519a2702042b7e3ee838cca458b35f607111a3897Richard Smith (void)(&t<int>>=p); // expected-error {{use '> >'}} 28619a2702042b7e3ee838cca458b35f607111a3897Richard Smith (void)(&t<S<int>>>=p); // expected-error {{use '> >'}} 28719a2702042b7e3ee838cca458b35f607111a3897Richard Smith (Shr)&t<S<int>>>>=p; // expected-error {{use '> >'}} 28819a2702042b7e3ee838cca458b35f607111a3897Richard Smith 28919a2702042b7e3ee838cca458b35f607111a3897Richard Smith // FIXME: We correct this to '&t<int> > >= p;' not '&t<int> >>= p;' 29019a2702042b7e3ee838cca458b35f607111a3897Richard Smith //(Shr)&t<int>>>=p; 29119a2702042b7e3ee838cca458b35f607111a3897Richard Smith 29219a2702042b7e3ee838cca458b35f607111a3897Richard Smith // FIXME: The fix-its here overlap. 29319a2702042b7e3ee838cca458b35f607111a3897Richard Smith //(void)(&t<S<int>>==p); 29419a2702042b7e3ee838cca458b35f607111a3897Richard Smith } 29519a2702042b7e3ee838cca458b35f607111a3897Richard Smith} 296abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie 297abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikieclass foo { 298abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie static void test() { 299abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie (void)&i; // expected-error{{must explicitly qualify name of member function when taking its address}} 300abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie } 301abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie int i(); 302abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie}; 30336771d910b049cc534841c48ced90772784af446David Blaikie 30436771d910b049cc534841c48ced90772784af446David Blaikienamespace dtor_fixit { 30536771d910b049cc534841c48ced90772784af446David Blaikie class foo { 30636771d910b049cc534841c48ced90772784af446David Blaikie ~bar() { } // expected-error {{expected the class name after '~' to name a destructor}} 30736771d910b049cc534841c48ced90772784af446David Blaikie // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:6-[[@LINE-1]]:9}:"foo" 30836771d910b049cc534841c48ced90772784af446David Blaikie }; 30936771d910b049cc534841c48ced90772784af446David Blaikie} 310a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith 311a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smithnamespace PR5066 { 312a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith template<typename T> struct X {}; 313a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith X<int *p> x; // expected-error {{type-id cannot have a name}} 314a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith} 31545c3ba76e90753006bdfeea884972ddd24cb3131Kaelyn Uhrain 3166e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrainnamespace PR5898 { 3176e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain class A { 3186e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain public: 3196e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain const char *str(); 3206e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain }; 3216e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain const char* foo(A &x) 3226e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain { 3236e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain return x.str.(); // expected-error {{unexpected '.' in function call; perhaps remove the '.'?}} 3246e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain } 3256e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain bool bar(A x, const char *y) { 3266e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain return foo->(x) == y; // expected-error {{unexpected '->' in function call; perhaps remove the '->'?}} 3276e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain } 3286e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain} 329c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain 330c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrainnamespace PR15045 { 331c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain class Cl0 { 332c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain public: 333c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain int a; 334c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain }; 335c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain 336c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain int f() { 337c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain Cl0 c; 338c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain return c->a; // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; maybe you meant to use '.'?}} 339c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain } 340c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain} 341