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
226bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinestemplate<int Value> struct CT { template<typename> struct Inner; }; // 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
356bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hinesstruct CT<2>::Inner<int> { }; // expected-error 2{{'template<>'}}
366bcf27bb9a4b5c3f79cb44c0e4654a6d7619ad89Stephen Hines
3728485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor// Access declarations
3828485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass A {
3928485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorprotected:
4028485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor  int foo();
4128485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor};
42ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson
4328485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass B : public A {
4428485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor  A::foo; // expected-warning{{access declarations are deprecated}}
4528485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor};
462eef829b19bdc59976a827fa39b409440e352bffDouglas Gregor
4798e13eac132c16466b75af3fd2365be09130e9d6Richard Smithvoid f() throw(); // expected-note{{previous}}
482eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid f(); // expected-warning{{missing exception specification}}
491aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor
501aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregornamespace rdar7853795 {
511aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor  struct A {
521aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor    bool getNumComponents() const; // expected-note{{declared here}}
53ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky    void dump() const {
541aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor      getNumComponenets(); // expected-error{{use of undeclared identifier 'getNumComponenets'; did you mean 'getNumComponents'?}}
551aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor    }
561aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor  };
571aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor}
58b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
59b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregornamespace rdar7796492 {
60f5485125ae70644c76b64ed3ff8a1c5fda937a82Benjamin Kramer  struct A { int x, y; A(); };
61b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
62b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor  A::A()
63b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor    : x(1) y(2) { // expected-error{{missing ',' between base or member initializers}}
64b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor  }
65b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
66b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor}
67a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif
68c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet// extra qualification on member
69c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichetclass C {
7075379455fc88ca1f021e55ffe1cab3a9c2b2a37aDouglas Gregor  int C::foo(); // expected-error {{extra qualification}}
71c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet};
72c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet
73a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisnamespace rdar8488464 {
74fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x = 0;
75fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}}
76fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}}
77fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}}
78fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}}
79fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}}
80fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}}
81fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}}
82fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}}
83fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}}
84fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}}
85fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}}
86fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}}
87fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}}
88fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieuint x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
89a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis
90a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisvoid f() {
91fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x = 0;
92a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis    (void)x;
93fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x1 &= 0; // expected-error {{invalid '&=' at end of declaration; did you mean '='?}}
94fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x1;
95fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x2 *= 0; // expected-error {{invalid '*=' at end of declaration; did you mean '='?}}
96fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x2;
97fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x3 += 0; // expected-error {{invalid '+=' at end of declaration; did you mean '='?}}
98fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x3;
99fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x4 -= 0; // expected-error {{invalid '-=' at end of declaration; did you mean '='?}}
100fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x4;
101fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x5 != 0; // expected-error {{invalid '!=' at end of declaration; did you mean '='?}}
102fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x5;
103fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x6 /= 0; // expected-error {{invalid '/=' at end of declaration; did you mean '='?}}
104fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x6;
105fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x7 %= 0; // expected-error {{invalid '%=' at end of declaration; did you mean '='?}}
106fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x7;
107fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x8 <= 0; // expected-error {{invalid '<=' at end of declaration; did you mean '='?}}
108fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x8;
109fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x9 <<= 0; // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}}
110fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x9;
111fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x10 >= 0; // expected-error {{invalid '>=' at end of declaration; did you mean '='?}}
112fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x10;
113fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x11 >>= 0; // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}}
114fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x11;
115fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x12 ^= 0; // expected-error {{invalid '^=' at end of declaration; did you mean '='?}}
116fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x12;
117fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x13 |= 0; // expected-error {{invalid '|=' at end of declaration; did you mean '='?}}
118fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x13;
119fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    int x14 == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
120fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    (void)x14;
121fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x = 0)  { (void)x; }
122fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x1 &= 0) { (void)x1; } // expected-error {{invalid '&=' at end of declaration; did you mean '='?}}
123fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x2 *= 0) { (void)x2; } // expected-error {{invalid '*=' at end of declaration; did you mean '='?}}
124fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x3 += 0) { (void)x3; } // expected-error {{invalid '+=' at end of declaration; did you mean '='?}}
125fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x4 -= 0) { (void)x4; } // expected-error {{invalid '-=' at end of declaration; did you mean '='?}}
126fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x5 != 0) { (void)x5; } // expected-error {{invalid '!=' at end of declaration; did you mean '='?}}
127fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x6 /= 0) { (void)x6; } // expected-error {{invalid '/=' at end of declaration; did you mean '='?}}
128fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x7 %= 0) { (void)x7; } // expected-error {{invalid '%=' at end of declaration; did you mean '='?}}
129fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x8 <= 0) { (void)x8; } // expected-error {{invalid '<=' at end of declaration; did you mean '='?}}
130fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x9 <<= 0) { (void)x9; } // expected-error {{invalid '<<=' at end of declaration; did you mean '='?}}
131fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x10 >= 0) { (void)x10; } // expected-error {{invalid '>=' at end of declaration; did you mean '='?}}
132fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x11 >>= 0) { (void)x11; } // expected-error {{invalid '>>=' at end of declaration; did you mean '='?}}
133fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x12 ^= 0) { (void)x12; } // expected-error {{invalid '^=' at end of declaration; did you mean '='?}}
134fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x13 |= 0) { (void)x13; } // expected-error {{invalid '|=' at end of declaration; did you mean '='?}}
135fcaf27e185695bdf755e202aeba9632e0a8ef3c6Richard Trieu    if (int x14 == 0) { (void)x14; } // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
136a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis}
137a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis}
138a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis
1394147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class A>
1404147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F1 {
1414147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetpublic:
1424147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet  template <int B>
1434147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet  class Iterator {
1444147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet  };
1454147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet};
1464147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet
1474147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate<class T>
1484147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetclass F2  {
1494147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet  typename F1<T>:: /*template*/  Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}}
1504147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet};
1514147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet
1524147d307086cf024a40a080e2bf379e9725f6f41Francois Pichettemplate <class T>
1534147d307086cf024a40a080e2bf379e9725f6f41Francois Pichetvoid f(){
1544147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet  typename F1<T>:: /*template*/ Iterator<0> Mypos; // expected-error {{use 'template' keyword to treat 'Iterator' as a dependent template name}}
1554147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet}
1564147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet
1576722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks// Tests for &/* fixits radar 7113438.
1586722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass AD {};
1596722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksclass BD: public AD {};
1606722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks
1616722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaksvoid test (BD &br) {
1626722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  AD* aPtr;
1636722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  BD b;
1646722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks  aPtr = b; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}}
16598e13eac132c16466b75af3fd2365be09130e9d6Richard Smith  aPtr = br; // expected-error {{assigning to 'AD *' from incompatible type 'BD'; take the address with &}}
1666722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks}
1676722155dfe056e2c3dfbacbcaffae04dea0c2be0Anna Zaks
168d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo1() const {} // expected-error {{non-member function cannot have 'const' qualifier}}
169d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo2() volatile {} // expected-error {{non-member function cannot have 'volatile' qualifier}}
170d37b360bf9f954af119c9805fdc79ab9d30e06c6Richard Smithvoid foo3() const volatile {} // expected-error {{non-member function cannot have 'const volatile' qualifier}}
1714147d307086cf024a40a080e2bf379e9725f6f41Francois Pichet
1720706df40064d4d7559b4304af79d519033414b84Richard Smithstruct S { void f(int, char); };
1730706df40064d4d7559b4304af79d519033414b84Richard Smithint itsAComma,
1740706df40064d4d7559b4304af79d519033414b84Richard SmithitsAComma2 = 0,
17598e13eac132c16466b75af3fd2365be09130e9d6Richard SmithoopsAComma(42), // expected-error {{expected ';' at end of declaration}}
1760706df40064d4d7559b4304af79d519033414b84Richard SmithAD oopsMoreCommas() {
17798e13eac132c16466b75af3fd2365be09130e9d6Richard Smith  static int n = 0, // expected-error {{expected ';' at end of declaration}}
1780706df40064d4d7559b4304af79d519033414b84Richard Smith  static char c,
17998e13eac132c16466b75af3fd2365be09130e9d6Richard Smith  &d = c, // expected-error {{expected ';' at end of declaration}}
18098e13eac132c16466b75af3fd2365be09130e9d6Richard Smith  S s, // expected-error {{expected ';' at end of declaration}}
1810706df40064d4d7559b4304af79d519033414b84Richard Smith  s.f(n, d);
18298e13eac132c16466b75af3fd2365be09130e9d6Richard Smith  AD ad, // expected-error {{expected ';' at end of declaration}}
1830706df40064d4d7559b4304af79d519033414b84Richard Smith  return ad;
1840706df40064d4d7559b4304af79d519033414b84Richard Smith}
1851c94c16317c1a35c1549e022958188eea2567089Richard Smithstruct MoreAccidentalCommas {
1861c94c16317c1a35c1549e022958188eea2567089Richard Smith  int a : 5,
1871c94c16317c1a35c1549e022958188eea2567089Richard Smith      b : 7,
1881c94c16317c1a35c1549e022958188eea2567089Richard Smith        : 4, // expected-error {{expected ';' at end of declaration}}
1891c94c16317c1a35c1549e022958188eea2567089Richard Smith  char c, // expected-error {{expected ';' at end of declaration}}
1901c94c16317c1a35c1549e022958188eea2567089Richard Smith  double d, // expected-error {{expected ';' at end of declaration}}
1911c94c16317c1a35c1549e022958188eea2567089Richard Smith  MoreAccidentalCommas *next, // expected-error {{expected ';' at end of declaration}}
1921c94c16317c1a35c1549e022958188eea2567089Richard Smithpublic:
1931c94c16317c1a35c1549e022958188eea2567089Richard Smith  int k, // expected-error {{expected ';' at end of declaration}}
1941c94c16317c1a35c1549e022958188eea2567089Richard Smith  friend void f(MoreAccidentalCommas) {}
1951c94c16317c1a35c1549e022958188eea2567089Richard Smith  int k2, // expected-error {{expected ';' at end of declaration}}
1961c94c16317c1a35c1549e022958188eea2567089Richard Smith  virtual void g(), // expected-error {{expected ';' at end of declaration}}
1971c94c16317c1a35c1549e022958188eea2567089Richard Smith};
198874d253668f9ed183ca409cdff9d424925ee7800Richard Smith
1996e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> struct Mystery;
2006e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smithtemplate<class T> typedef Mystery<T>::type getMysteriousThing() { // \
2016e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith  expected-error {{function definition declared 'typedef'}} \
2026e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith  expected-error {{missing 'typename' prior to dependent}}
2036e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith  return Mystery<T>::get();
2046e1fd33116c2977174f2df17ac8bad2a32659db8Richard Smith}
205460ef136eb96b879f149c8703938a13c35b4bc68David Blaikie
206673720d8cfbc8c9d08faec2817f1e1452e4ecc2eDavid Blaikietemplate<template<typename> Foo, // expected-error {{template template parameter requires 'class' after the parameter list}}
207ef8225444452a1486bd721f3285301fe84643b00Stephen Hines         template<typename> typename Bar, // expected-warning {{template template parameter using 'typename' is a C++1z extension}}
208673720d8cfbc8c9d08faec2817f1e1452e4ecc2eDavid Blaikie         template<typename> struct Baz> // expected-error {{template template parameter requires 'class' after the parameter list}}
209460ef136eb96b879f149c8703938a13c35b4bc68David Blaikievoid func();
210434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain
211434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainnamespace ShadowedTagType {
212434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainclass Foo {
213434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain public:
214434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain  enum Bar { X, Y };
215434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain  void SetBar(Bar bar);
216392b3f5798a62fe038082df0a5e2244b08b917d8Kaelyn Uhrain  Bar Bar(); // expected-note 2 {{enum 'Bar' is hidden by a non-type declaration of 'Bar' here}}
217434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain private:
218434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain  Bar bar_; // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}}
219434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrain};
220434ed260eb28cacd1b87fc2429dfee66d61dfcf0Kaelyn Uhrainvoid Foo::SetBar(Bar bar) { bar_ = bar; } // expected-error {{must use 'enum' tag to refer to type 'Bar' in this scope}}
2211e77b65b4819bc7a809245b12bd00450b4924025Kaelyn Uhrain}
2222b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain
2232c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikie#define NULL __null
2242c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikiechar c = NULL; // expected-warning {{implicit conversion of NULL constant to 'char'}}
225b26331b4ff419b22861b0823daf83bc8f22a6803David Blaikiedouble dbl = NULL; // expected-warning {{implicit conversion of NULL constant to 'double'}}
2262c0abf4ae33ab2ba690ccae724b8d6f196e7cfdaDavid Blaikie
2272b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainnamespace arrow_suggest {
2282b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain
2292b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhraintemplate <typename T>
2302b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass wrapped_ptr {
2312b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public:
2322b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  wrapped_ptr(T* ptr) : ptr_(ptr) {}
2332b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  T* operator->() { return ptr_; }
2342b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain private:
2352b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  T *ptr_;
2362b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain};
2372b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain
2382b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainclass Worker {
2392b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain public:
2402b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  void DoSomething();
2412b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain};
2422b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain
2432b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrainvoid test() {
2442b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  wrapped_ptr<Worker> worker(new Worker);
2452b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain  worker.DoSomething(); // expected-error {{no member named 'DoSomething' in 'arrow_suggest::wrapped_ptr<arrow_suggest::Worker>'; did you mean to use '->' instead of '.'?}}
2462b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain}
2472b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain
2482b90f7637e846ea555dedac14e7f5065d85c5d3bKaelyn Uhrain} // namespace arrow_suggest
249b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain
250b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain// Make sure fixing namespace-qualified identifiers functions properly with
251b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain// namespace-aware typo correction/
252b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace redecl_typo {
253b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace Foo {
254b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain  void BeEvil(); // expected-note {{'BeEvil' declared here}}
255b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain}
256b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrainnamespace Bar {
257b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain  namespace Foo {
258b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain    bool isGood(); // expected-note {{'Bar::Foo::isGood' declared here}}
259b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain    void beEvil();
260b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain  }
261b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain}
262b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn 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'?}}
263b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain  return true;
264b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain}
265b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn 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'?}}
266b7fe579968a2fad25d95514f96c6649aae519c81Kaelyn Uhrain}
26719a2702042b7e3ee838cca458b35f607111a3897Richard Smith
26819a2702042b7e3ee838cca458b35f607111a3897Richard Smith// Test behavior when a template-id is ended by a token which starts with '>'.
26919a2702042b7e3ee838cca458b35f607111a3897Richard Smithnamespace greatergreater {
27019a2702042b7e3ee838cca458b35f607111a3897Richard Smith  template<typename T> struct S { S(); S(T); };
27119a2702042b7e3ee838cca458b35f607111a3897Richard Smith  void f(S<int>=0); // expected-error {{a space is required between a right angle bracket and an equals sign (use '> =')}}
27219a2702042b7e3ee838cca458b35f607111a3897Richard Smith
27319a2702042b7e3ee838cca458b35f607111a3897Richard Smith  // FIXME: The fix-its here overlap so -fixit mode can't apply the second one.
27419a2702042b7e3ee838cca458b35f607111a3897Richard Smith  //void f(S<S<int>>=S<int>());
27519a2702042b7e3ee838cca458b35f607111a3897Richard Smith
27619a2702042b7e3ee838cca458b35f607111a3897Richard Smith  struct Shr {
27719a2702042b7e3ee838cca458b35f607111a3897Richard Smith    template<typename T> Shr(T);
27819a2702042b7e3ee838cca458b35f607111a3897Richard Smith    template<typename T> void operator >>=(T);
27919a2702042b7e3ee838cca458b35f607111a3897Richard Smith  };
28019a2702042b7e3ee838cca458b35f607111a3897Richard Smith
28119a2702042b7e3ee838cca458b35f607111a3897Richard Smith  template<template<typename>> struct TemplateTemplateParam; // expected-error {{requires 'class'}}
28219a2702042b7e3ee838cca458b35f607111a3897Richard Smith
28319a2702042b7e3ee838cca458b35f607111a3897Richard Smith  template<typename T> void t();
28419a2702042b7e3ee838cca458b35f607111a3897Richard Smith  void g() {
28519a2702042b7e3ee838cca458b35f607111a3897Richard Smith    void (*p)() = &t<int>;
28619a2702042b7e3ee838cca458b35f607111a3897Richard Smith    (void)(&t<int>==p); // expected-error {{use '> ='}}
28719a2702042b7e3ee838cca458b35f607111a3897Richard Smith    (void)(&t<int>>=p); // expected-error {{use '> >'}}
28819a2702042b7e3ee838cca458b35f607111a3897Richard Smith    (void)(&t<S<int>>>=p); // expected-error {{use '> >'}}
28919a2702042b7e3ee838cca458b35f607111a3897Richard Smith    (Shr)&t<S<int>>>>=p; // expected-error {{use '> >'}}
29019a2702042b7e3ee838cca458b35f607111a3897Richard Smith
29119a2702042b7e3ee838cca458b35f607111a3897Richard Smith    // FIXME: We correct this to '&t<int> > >= p;' not '&t<int> >>= p;'
29219a2702042b7e3ee838cca458b35f607111a3897Richard Smith    //(Shr)&t<int>>>=p;
29319a2702042b7e3ee838cca458b35f607111a3897Richard Smith
29419a2702042b7e3ee838cca458b35f607111a3897Richard Smith    // FIXME: The fix-its here overlap.
29519a2702042b7e3ee838cca458b35f607111a3897Richard Smith    //(void)(&t<S<int>>==p);
29619a2702042b7e3ee838cca458b35f607111a3897Richard Smith  }
29719a2702042b7e3ee838cca458b35f607111a3897Richard Smith}
298abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie
299abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikieclass foo {
300abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie  static void test() {
301abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie    (void)&i; // expected-error{{must explicitly qualify name of member function when taking its address}}
302abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie  }
303abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie  int i();
304abeadfb11fde148f15c2fd67015e8163609d5b68David Blaikie};
30536771d910b049cc534841c48ced90772784af446David Blaikie
30636771d910b049cc534841c48ced90772784af446David Blaikienamespace dtor_fixit {
30736771d910b049cc534841c48ced90772784af446David Blaikie  class foo {
30836771d910b049cc534841c48ced90772784af446David Blaikie    ~bar() { }  // expected-error {{expected the class name after '~' to name a destructor}}
30936771d910b049cc534841c48ced90772784af446David Blaikie    // CHECK: fix-it:"{{.*}}":{[[@LINE-1]]:6-[[@LINE-1]]:9}:"foo"
31036771d910b049cc534841c48ced90772784af446David Blaikie  };
31136771d910b049cc534841c48ced90772784af446David Blaikie}
312a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith
313a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smithnamespace PR5066 {
314a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith  template<typename T> struct X {};
315a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith  X<int *p> x; // expected-error {{type-id cannot have a name}}
316a38253c3e7dbd2b5aadb0556845dc3848168b904Richard Smith}
31745c3ba76e90753006bdfeea884972ddd24cb3131Kaelyn Uhrain
3186e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrainnamespace PR5898 {
3196e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  class A {
3206e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  public:
3216e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain    const char *str();
3226e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  };
3236e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  const char* foo(A &x)
3246e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  {
3256e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain    return x.str.();  // expected-error {{unexpected '.' in function call; perhaps remove the '.'?}}
3266e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  }
3276e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  bool bar(A x, const char *y) {
3286e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain    return foo->(x) == y;  // expected-error {{unexpected '->' in function call; perhaps remove the '->'?}}
3296e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain  }
3306e9d86b31813edafb775c93e5b5595ebce1e71e1Kaelyn Uhrain}
331c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain
332c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrainnamespace PR15045 {
333c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain  class Cl0 {
334c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain  public:
335c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain    int a;
336c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain  };
337c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain
338c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain  int f() {
339c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain    Cl0 c;
340c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain    return c->a;  // expected-error {{member reference type 'PR15045::Cl0' is not a pointer; maybe you meant to use '.'?}}
341c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain  }
342c14e6dda1e1287d3e0aeaa0e8f7bb2c9126f312cKaelyn Uhrain}
343