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