fixit.cpp revision a6eb5f81d13bacac01faff70a947047725b4413f
1ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky// RUN: cp %s %t
2ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky// RUN: %clang_cc1 -pedantic -Wall -fixit -x c++ %t || true
3ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky// RUN: %clang_cc1 -fsyntax-only -pedantic -Wall -Werror -x c++ %t
49b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor
59b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor/* This is a test of the various code modification hints that are
6fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor   provided as part of warning or extension diagnostics. All of the
7fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor   warnings will be fixed by -fixit, and the resulting file should
8fe057ac36b9a76cdfa37dfa003f986461fb5fb98Douglas Gregor   compile cleanly with -Werror -pedantic. */
99b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor
10ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewyckystruct C1 {
11a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor  virtual void f();
12a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor  static void g();
13a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor};
149b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregorstruct C2 : virtual public virtual C1 { }; // expected-error{{duplicate}}
159b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor
16a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorvirtual void C1::f() { } // expected-error{{'virtual' can only be specified inside the class definition}}
17a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor
18a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstatic void C1::g() { } // expected-error{{'static' can only be specified inside the class definition}}
19a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor
20a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregortemplate<int Value> struct CT { }; // expected-note{{previous use is here}}
219b3064b55f3c858923734e8b1c9831777fc22554Douglas Gregor
229b3064b55f3c858923734e8b1c9831777fc22554Douglas GregorCT<10 >> 2> ct; // expected-warning{{require parentheses}}
23a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor
24a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorclass C3 {
25a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorpublic:
26a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor  C3(C3, int i = 0); // expected-error{{copy constructor must pass its first argument by reference}}
27a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor};
28a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor
29a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregorstruct CT<0> { }; // expected-error{{'template<>'}}
30a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregor
31a3a835149ed4b183e3b009a1f94a6123779d696bDouglas Gregortemplate<> class CT<1> { }; // expected-error{{tag type}}
32ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson
3328485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor// Access declarations
3428485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass A {
3528485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorprotected:
3628485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor  int foo();
3728485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor};
38ad26b7376b6fd71d14b9b893eaa1ba79e029c830Anders Carlsson
3928485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregorclass B : public A {
4028485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor  A::foo; // expected-warning{{access declarations are deprecated}}
4128485232e411b4a296f629bcabd3904dbb9cd7beDouglas Gregor};
422eef829b19bdc59976a827fa39b409440e352bffDouglas Gregor
432eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid f() throw();
442eef829b19bdc59976a827fa39b409440e352bffDouglas Gregorvoid f(); // expected-warning{{missing exception specification}}
451aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor
461aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregornamespace rdar7853795 {
471aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor  struct A {
481aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor    bool getNumComponents() const; // expected-note{{declared here}}
49ba5f6eced29937e4e4851a2c0980744768413d66Nick Lewycky    void dump() const {
501aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor      getNumComponenets(); // expected-error{{use of undeclared identifier 'getNumComponenets'; did you mean 'getNumComponents'?}}
511aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor    }
521aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor  };
531aae80b173e22fa5d649f114eb6607efac350d79Douglas Gregor}
54b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
55b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregornamespace rdar7796492 {
56b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor  class A { int x, y; A(); };
57b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
58b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor  A::A()
59b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor    : x(1) y(2) { // expected-error{{missing ',' between base or member initializers}}
60b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor  }
61b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor
62b1f6fa48960eae269a3931d1fc545ed468d9a4d2Douglas Gregor}
63a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif
64a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor GreifCT<1> main(void); // expected-error{{'main' must return 'int'}}
65a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif
66a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif// typedef CT<1> mainT(void);
67a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif// mainT main; // TODO
68a4a301dc74dd4e7da1c35cbb3c1e03614482728bGabor Greif
69c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet// extra qualification on member
70c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichetclass C {
71c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet  int C::foo();
72c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet};
73c71d8eb6592ae3ef498fc57db3563d1dfae48dffFrancois Pichet
74a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisnamespace rdar8488464 {
75a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisint x == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
76a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis
77a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidisvoid f() {
78a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis    int x == 0; // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
79a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis    (void)x;
80a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis    if (int x == 0) { // expected-error {{invalid '==' at end of declaration; did you mean '='?}}
81a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis      (void)x;
82a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis    }
83a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis}
84a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis}
85a6eb5f81d13bacac01faff70a947047725b4413fArgyrios Kyrtzidis
86