p2.cpp revision ef8225444452a1486bd721f3285301fe84643b00
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