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