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