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
24 typedef int Int;
25 typedef char Char;
26 typedef Char* Carp;
27
main(Int argc,Carp argv[])28 Int main(Int argc, Carp argv[]) {
29 }
30
31 #elif TEST2
32
33 // expected-no-diagnostics
34 typedef int Int;
35 typedef char Char;
36 typedef Char* Carp;
37
main(Int argc,Carp argv[],Char * env[])38 Int main(Int argc, Carp argv[], Char *env[]) {
39 }
40
41 #elif TEST3
42
43 // expected-no-diagnostics
main()44 int main() {
45 }
46
47 #elif TEST4
48
main()49 static int main() { // expected-error {{'main' is not allowed to be declared static}}
50 }
51
52 #elif TEST5
53
main()54 inline int main() { // expected-error {{'main' is not allowed to be declared inline}}
55 }
56
57 #elif TEST6
58
59 void // expected-error {{'main' must return 'int'}}
main(float a)60 main( // expected-error {{first parameter of 'main' (argument count) must be of type 'int'}}
61 float a
62 ) {
63 }
64
65 const int main(); // expected-error {{'main' must return 'int'}}
66
67 #elif TEST7
68
69 // expected-no-diagnostics
main(int argc,const char * const * argv)70 int main(int argc, const char* const* argv) {
71 }
72
73 #elif TEST8
74
75 template<typename T>
main()76 int main() { } // expected-error{{'main' cannot be a template}}
77
78 #elif TEST9
79
main()80 constexpr int main() { } // expected-error{{'main' is not allowed to be declared constexpr}}
81
82 #elif TEST10
83
84 // PR15100
85 // expected-no-diagnostics
86 typedef char charT;
main(int,const charT **)87 int main(int, const charT**) {}
88
89 #elif TEST11
90
91 // expected-no-diagnostics
92 typedef char charT;
main(int,charT * const *)93 int main(int, charT* const *) {}
94
95 #elif TEST12
96
97 // expected-no-diagnostics
98 typedef char charT;
main(int,const charT * const *)99 int main(int, const charT* const *) {}
100
101 #elif TEST13
102
main(void)103 int main(void) {}
104
105 template <typename T>
106 int main(void); // expected-error{{'main' cannot be a template}}
107
108 #elif TEST14
109
110 template <typename T>
111 int main(void); // expected-error{{'main' cannot be a template}}
112
main(void)113 int main(void) {}
114
115 #else
116
117 #error Unknown test mode
118
119 #endif
120