fixit.cpp revision fcaf27e185695bdf755e202aeba9632e0a8ef3c6
16e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: %clang_cc1 -pedantic -Wall -Wno-comment -verify -fcxx-exceptions -x c++ %s 2ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky// RUN: cp %s %t 36e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: not %clang_cc1 -pedantic -Wall -Wno-comment -fcxx-exceptions -fixit -x c++ %t 46e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror -Wno-comment -fcxx-exceptions -x c++ %t 59b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 69b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor/* This is a test of the various code modification hints that are 7fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor provided as part of warning or extension diagnostics. All of the 8fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor warnings will be fixed by -fixit, and the resulting file should 9fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor compile cleanly with -Werror -pedantic. */ 109b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 11ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewyckystruct C1 { 12a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor virtual void f(); 13a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor static void g(); 14a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor}; 159b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregorstruct C2 : virtual public virtual C1 { }; // expected-error{{duplicate}} 169b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 17a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorvirtual void C1::f() { } // expected-error{{'virtual' can only be specified inside the class definition}} 18a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 19a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstatic void C1::g() { } // expected-error{{'static' can only be specified inside the class definition}} 20a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 21a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregortemplate<int Value> struct CT { }; // expected-note{{previous use is here}} 229b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor 239b3064b55f3c858923734e8b1c9831777fc22554Douglas GregorCT<10 >> 2> ct; // expected-warning{{require parentheses}} 24a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 25a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorclass C3 { 26a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorpublic: 27a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor C3(C3, int i = 0); // expected-error{{copy constructor must pass its first argument by reference}} 28a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor}; 29a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 30a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstruct CT<0> { }; // expected-error{{'template<>'}} 31a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor 3298e13eac132c16466b75af3fd2365be09130e9d6Richard Smithtemplate<> union CT<1> { }; // expected-error{{tag type}} 33ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson 3428485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor// Access declarations 3528485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass A { 3628485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorprotected: 3728485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor int foo(); 3828485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor}; 39ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson 4028485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass B : public A { 4128485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor A::foo; // expected-warning{{access declarations are deprecated}} 4228485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor}; 432eef829b19bdc59976a827fa39b409440e352bffDouglas Gregor 4498e13eac132c16466b75af3fd2365be09130e9d6Richard Smithvoid f() throw(); // expected-note{{previous}} 452eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid f(); // expected-warning{{missing exception specification}} 461aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor 471aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregornamespace rdar7853795 { 481aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor struct A { 491aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor bool getNumComponents() const; // expected-note{{declared here}} 50ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky void dump() const { 511aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor getNumComponenets(); // expected-error{{use of undeclared identifier 'getNumComponenets'; did you mean 'getNumComponents'?}} 521aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor } 531aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor }; 541aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor} 55b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 56b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregornamespace rdar7796492 { 57b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor class A { int x, y; A(); }; 58b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 59b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor A::A() 60b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor : x(1) y(2) { // expected-error{{missing ',' between base or member initializers}} 61b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor } 62b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor 63b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor} 64a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif 65c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet// extra qualification on member 66c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichetclass C { 6798e13eac132c16466b75af3fd2365be09130e9d6Richard Smith int C::foo(); // expected-warning {{extra qualification}} 68c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet}; 69c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet 70a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisnamespace rdar8488464 { 71fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x = 0; 72fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 73fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 74fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 75fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 76fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 77fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 78fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 79fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 80fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 81fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 82fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 83fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 84fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 85fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 86a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis 87a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisvoid f() { 88fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x = 0; 89a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis (void)x; 90fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 91fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x1; 92fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 93fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x2; 94fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 95fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x3; 96fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 97fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x4; 98fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 99fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x5; 100fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 101fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x6; 102fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 103fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x7; 104fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 105fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x8; 106fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 107fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x9; 108fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 109fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x10; 110fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 111fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x11; 112fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 113fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x12; 114fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 115fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x13; 116fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu int x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 117fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu (void)x14; 118fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x = 0) { (void)x; } 119fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x1 &= 0) { (void)x1; } // expected-error {{invalid '&=' at end of declaration; did you mean '='?}} 120fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x2 *= 0) { (void)x2; } // expected-error {{invalid '*=' at end of declaration; did you mean '='?}} 121fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x3 += 0) { (void)x3; } // expected-error {{invalid '+=' at end of declaration; did you mean '='?}} 122fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x4 -= 0) { (void)x4; } // expected-error {{invalid '-=' at end of declaration; did you mean '='?}} 123fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x5 != 0) { (void)x5; } // expected-error {{invalid '!=' at end of declaration; did you mean '='?}} 124fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x6 /= 0) { (void)x6; } // expected-error {{invalid '/=' at end of declaration; did you mean '='?}} 125fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x7 %= 0) { (void)x7; } // expected-error {{invalid '%=' at end of declaration; did you mean '='?}} 126fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x8 <= 0) { (void)x8; } // expected-error {{invalid '<=' at end of declaration; did you mean '='?}} 127fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x9 <<= 0) { (void)x9; } // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}} 128fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x10 >= 0) { (void)x10; } // expected-error {{invalid '>=' at end of declaration; did you mean '='?}} 129fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x11 >>= 0) { (void)x11; } // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}} 130fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x12 ^= 0) { (void)x12; } // expected-error {{invalid '^=' at end of declaration; did you mean '='?}} 131fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x13 |= 0) { (void)x13; } // expected-error {{invalid '|=' at end of declaration; did you mean '='?}} 132fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu if (int x14 == 0) { (void)x14; } // expected-error {{invalid '==' at end of declaration; did you mean '='?}} 133a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis} 134a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis} 135a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis 1364147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class A> 1374147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F1 { 1384147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetpublic: 1394147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet template <int B> 1404147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet class Iterator { 1414147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet }; 1424147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet}; 1434147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1444147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate<class T> 1454147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F2 { 1464147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet typename F1<T>:: /*template*/ Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}} 1474147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet}; 1484147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1494147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class T> 1504147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetvoid f(){ 1514147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet typename F1<T>:: /*template*/ Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}} 1524147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet} 1534147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1546722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// Tests for &/* fixits radar 7113438. 1556722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass AD {}; 1566722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass BD: public AD {}; 1576722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks 1586722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid test (BD &br) { 1596722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks AD* aPtr; 1606722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks BD b; 1616722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks aPtr = b; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} 16298e13eac132c16466b75af3fd2365be09130e9d6Richard Smith aPtr = br; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}} 1636722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks} 1646722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks 16543f5103f8051bbac19022e6edaf7d9138b0f3c0fDouglas Gregorvoid foo1() const {} // expected-error {{type qualifier is not allowed on this function}} 16643f5103f8051bbac19022e6edaf7d9138b0f3c0fDouglas Gregorvoid foo2() volatile {} // expected-error {{type qualifier is not allowed on this function}} 16743f5103f8051bbac19022e6edaf7d9138b0f3c0fDouglas Gregorvoid foo3() const volatile {} // expected-error {{type qualifier is not allowed on this function}} 1684147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet 1690706df40064d4d7559b4304af79d519033414b84Richard Smithstruct S { void f(int, char); }; 1700706df40064d4d7559b4304af79d519033414b84Richard Smithint itsAComma, 1710706df40064d4d7559b4304af79d519033414b84Richard SmithitsAComma2 = 0, 17298e13eac132c16466b75af3fd2365be09130e9d6Richard SmithoopsAComma(42), // expected-error {{expected ';' at end of declaration}} 1730706df40064d4d7559b4304af79d519033414b84Richard SmithAD oopsMoreCommas() { 17498e13eac132c16466b75af3fd2365be09130e9d6Richard Smith static int n = 0, // expected-error {{expected ';' at end of declaration}} 1750706df40064d4d7559b4304af79d519033414b84Richard Smith static char c, 17698e13eac132c16466b75af3fd2365be09130e9d6Richard Smith &d = c, // expected-error {{expected ';' at end of declaration}} 17798e13eac132c16466b75af3fd2365be09130e9d6Richard Smith S s, // expected-error {{expected ';' at end of declaration}} 1780706df40064d4d7559b4304af79d519033414b84Richard Smith s.f(n, d); 17998e13eac132c16466b75af3fd2365be09130e9d6Richard Smith AD ad, // expected-error {{expected ';' at end of declaration}} 1800706df40064d4d7559b4304af79d519033414b84Richard Smith return ad; 1810706df40064d4d7559b4304af79d519033414b84Richard Smith} 1821c94c16317c1a35c1549e022958188eea2567089Richard Smithstruct MoreAccidentalCommas { 1831c94c16317c1a35c1549e022958188eea2567089Richard Smith int a : 5, 1841c94c16317c1a35c1549e022958188eea2567089Richard Smith b : 7, 1851c94c16317c1a35c1549e022958188eea2567089Richard Smith : 4, // expected-error {{expected ';' at end of declaration}} 1861c94c16317c1a35c1549e022958188eea2567089Richard Smith char c, // expected-error {{expected ';' at end of declaration}} 1871c94c16317c1a35c1549e022958188eea2567089Richard Smith double d, // expected-error {{expected ';' at end of declaration}} 1881c94c16317c1a35c1549e022958188eea2567089Richard Smith MoreAccidentalCommas *next, // expected-error {{expected ';' at end of declaration}} 1891c94c16317c1a35c1549e022958188eea2567089Richard Smithpublic: 1901c94c16317c1a35c1549e022958188eea2567089Richard Smith int k, // expected-error {{expected ';' at end of declaration}} 1911c94c16317c1a35c1549e022958188eea2567089Richard Smith friend void f(MoreAccidentalCommas) {} 1921c94c16317c1a35c1549e022958188eea2567089Richard Smith int k2, // expected-error {{expected ';' at end of declaration}} 1931c94c16317c1a35c1549e022958188eea2567089Richard Smith virtual void g(), // expected-error {{expected ';' at end of declaration}} 1941c94c16317c1a35c1549e022958188eea2567089Richard Smith}; 195874d253668f9ed183ca409cdff9d424925ee7800Richard Smith 1966e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> struct Mystery; 1976e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> typedef Mystery<T>::type getMysteriousThing() { // \ 1986e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith expected-error {{function definition declared 'typedef'}} \ 1996e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith expected-error {{missing 'typename' prior to dependent}} 2006e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith return Mystery<T>::get(); 2016e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith} 202