1e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST1
2e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST2
3e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST3
4e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST4
5e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST5
6e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST6
7e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST7
8e1564ea6SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST8
9e1564ea6SRichard Smith
10e1564ea6SRichard Smith // RUN: cp %s %t
11e1564ea6SRichard Smith // RUN: %clang_cc1 -x c++ %s -std=c++11 -fsyntax-only -verify -DTEST9
12e1564ea6SRichard Smith // RUN: not %clang_cc1 -x c++ %t -std=c++11 -fixit -DTEST9
13e1564ea6SRichard Smith // RUN: %clang_cc1 -x c++ %t -std=c++11 -fsyntax-only -DTEST9
14e1564ea6SRichard Smith
15685cef64SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST10
16685cef64SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST11
17685cef64SRichard Smith // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST12
18027f9c40SDavid Majnemer // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST13
19ea5092a3SDavid Majnemer // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST14
20685cef64SRichard Smith
21e1564ea6SRichard Smith #if TEST1
22e1564ea6SRichard Smith
23e1564ea6SRichard Smith // expected-no-diagnostics
24e1564ea6SRichard Smith typedef int Int;
25e1564ea6SRichard Smith typedef char Char;
26e1564ea6SRichard Smith typedef Char* Carp;
27e1564ea6SRichard Smith
main(Int argc,Carp argv[])28e1564ea6SRichard Smith Int main(Int argc, Carp argv[]) {
29e1564ea6SRichard Smith }
30e1564ea6SRichard Smith
31e1564ea6SRichard Smith #elif TEST2
32e1564ea6SRichard Smith
33e1564ea6SRichard Smith // expected-no-diagnostics
34e1564ea6SRichard Smith typedef int Int;
35e1564ea6SRichard Smith typedef char Char;
36e1564ea6SRichard Smith typedef Char* Carp;
37e1564ea6SRichard Smith
main(Int argc,Carp argv[],Char * env[])38e1564ea6SRichard Smith Int main(Int argc, Carp argv[], Char *env[]) {
39e1564ea6SRichard Smith }
40e1564ea6SRichard Smith
41e1564ea6SRichard Smith #elif TEST3
42e1564ea6SRichard Smith
43e1564ea6SRichard Smith // expected-no-diagnostics
main()44e1564ea6SRichard Smith int main() {
45e1564ea6SRichard Smith }
46e1564ea6SRichard Smith
47e1564ea6SRichard Smith #elif TEST4
48e1564ea6SRichard Smith
main()49e1564ea6SRichard Smith static int main() { // expected-error {{'main' is not allowed to be declared static}}
50e1564ea6SRichard Smith }
51e1564ea6SRichard Smith
52e1564ea6SRichard Smith #elif TEST5
53e1564ea6SRichard Smith
main()54e1564ea6SRichard Smith inline int main() { // expected-error {{'main' is not allowed to be declared inline}}
55e1564ea6SRichard Smith }
56e1564ea6SRichard Smith
57e1564ea6SRichard Smith #elif TEST6
58e1564ea6SRichard Smith
59e1564ea6SRichard Smith void // expected-error {{'main' must return 'int'}}
main(float a)60e1564ea6SRichard Smith main( // expected-error {{first parameter of 'main' (argument count) must be of type 'int'}}
61e1564ea6SRichard Smith float a
62e1564ea6SRichard Smith ) {
63e1564ea6SRichard Smith }
64e1564ea6SRichard Smith
65*70fc29caSAlp Toker const int main(); // expected-error {{'main' must return 'int'}}
66*70fc29caSAlp Toker
67e1564ea6SRichard Smith #elif TEST7
68e1564ea6SRichard Smith
69e1564ea6SRichard Smith // expected-no-diagnostics
main(int argc,const char * const * argv)70e1564ea6SRichard Smith int main(int argc, const char* const* argv) {
71e1564ea6SRichard Smith }
72e1564ea6SRichard Smith
73e1564ea6SRichard Smith #elif TEST8
74e1564ea6SRichard Smith
75e1564ea6SRichard Smith template<typename T>
main()76e1564ea6SRichard Smith int main() { } // expected-error{{'main' cannot be a template}}
77e1564ea6SRichard Smith
78e1564ea6SRichard Smith #elif TEST9
79e1564ea6SRichard Smith
main()80e1564ea6SRichard Smith constexpr int main() { } // expected-error{{'main' is not allowed to be declared constexpr}}
81e1564ea6SRichard Smith
82685cef64SRichard Smith #elif TEST10
83685cef64SRichard Smith
84685cef64SRichard Smith // PR15100
85685cef64SRichard Smith // expected-no-diagnostics
86685cef64SRichard Smith typedef char charT;
main(int,const charT **)87685cef64SRichard Smith int main(int, const charT**) {}
88685cef64SRichard Smith
89685cef64SRichard Smith #elif TEST11
90685cef64SRichard Smith
91685cef64SRichard Smith // expected-no-diagnostics
92685cef64SRichard Smith typedef char charT;
main(int,charT * const *)93685cef64SRichard Smith int main(int, charT* const *) {}
94685cef64SRichard Smith
95685cef64SRichard Smith #elif TEST12
96685cef64SRichard Smith
97685cef64SRichard Smith // expected-no-diagnostics
98685cef64SRichard Smith typedef char charT;
main(int,const charT * const *)99685cef64SRichard Smith int main(int, const charT* const *) {}
100685cef64SRichard Smith
101027f9c40SDavid Majnemer #elif TEST13
102027f9c40SDavid Majnemer
main(void)103027f9c40SDavid Majnemer int main(void) {}
104027f9c40SDavid Majnemer
105027f9c40SDavid Majnemer template <typename T>
106027f9c40SDavid Majnemer int main(void); // expected-error{{'main' cannot be a template}}
107027f9c40SDavid Majnemer
108ea5092a3SDavid Majnemer #elif TEST14
109ea5092a3SDavid Majnemer
110ea5092a3SDavid Majnemer template <typename T>
111ea5092a3SDavid Majnemer int main(void); // expected-error{{'main' cannot be a template}}
112ea5092a3SDavid Majnemer
main(void)113ea5092a3SDavid Majnemer int main(void) {}
114ea5092a3SDavid Majnemer
115e1564ea6SRichard Smith #else
116e1564ea6SRichard Smith
117e1564ea6SRichard Smith #error Unknown test mode
118e1564ea6SRichard Smith
119e1564ea6SRichard Smith #endif
120