1// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST1 2// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST2 3// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST3 4// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST4 5// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST5 6// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST6 7// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST7 8// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST8 9 10// RUN: cp %s %t 11// RUN: %clang_cc1 -x c++ %s -std=c++11 -fsyntax-only -verify -DTEST9 12// RUN: not %clang_cc1 -x c++ %t -std=c++11 -fixit -DTEST9 13// RUN: %clang_cc1 -x c++ %t -std=c++11 -fsyntax-only -DTEST9 14 15// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST10 16// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST11 17// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST12 18// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST13 19// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST14 20 21#if TEST1 22 23// expected-no-diagnostics 24typedef int Int; 25typedef char Char; 26typedef Char* Carp; 27 28Int main(Int argc, Carp argv[]) { 29} 30 31#elif TEST2 32 33// expected-no-diagnostics 34typedef int Int; 35typedef char Char; 36typedef Char* Carp; 37 38Int main(Int argc, Carp argv[], Char *env[]) { 39} 40 41#elif TEST3 42 43// expected-no-diagnostics 44int main() { 45} 46 47#elif TEST4 48 49static int main() { // expected-error {{'main' is not allowed to be declared static}} 50} 51 52#elif TEST5 53 54inline int main() { // expected-error {{'main' is not allowed to be declared inline}} 55} 56 57#elif TEST6 58 59void // expected-error {{'main' must return 'int'}} 60main( // expected-error {{first parameter of 'main' (argument count) must be of type 'int'}} 61 float a 62) { 63} 64 65const int main(); // expected-error {{'main' must return 'int'}} 66 67#elif TEST7 68 69// expected-no-diagnostics 70int main(int argc, const char* const* argv) { 71} 72 73#elif TEST8 74 75template<typename T> 76int main() { } // expected-error{{'main' cannot be a template}} 77 78#elif TEST9 79 80constexpr int main() { } // expected-error{{'main' is not allowed to be declared constexpr}} 81 82#elif TEST10 83 84// PR15100 85// expected-no-diagnostics 86typedef char charT; 87int main(int, const charT**) {} 88 89#elif TEST11 90 91// expected-no-diagnostics 92typedef char charT; 93int main(int, charT* const *) {} 94 95#elif TEST12 96 97// expected-no-diagnostics 98typedef char charT; 99int main(int, const charT* const *) {} 100 101#elif TEST13 102 103int main(void) {} 104 105template <typename T> 106int main(void); // expected-error{{'main' cannot be a template}} 107 108#elif TEST14 109 110template <typename T> 111int main(void); // expected-error{{'main' cannot be a template}} 112 113int main(void) {} 114 115#else 116 117#error Unknown test mode 118 119#endif 120