1*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST1
2*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST2
3*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST3
4*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST4
5*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14 -DTEST5
6*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -std=c++14 -DTEST6
7*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST7
8*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST8
9*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST9
10*da8a3b90SDavide Italiano // RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST10 -ffreestanding
11*da8a3b90SDavide Italiano 
12*da8a3b90SDavide Italiano #if TEST1
13*da8a3b90SDavide Italiano int main; // expected-error{{main cannot be declared as global variable}}
14*da8a3b90SDavide Italiano 
15*da8a3b90SDavide Italiano #elif TEST2
16*da8a3b90SDavide Italiano // expected-no-diagnostics
f()17*da8a3b90SDavide Italiano int f () {
18*da8a3b90SDavide Italiano   int main;
19*da8a3b90SDavide Italiano   return main;
20*da8a3b90SDavide Italiano }
21*da8a3b90SDavide Italiano 
22*da8a3b90SDavide Italiano #elif TEST3
23*da8a3b90SDavide Italiano // expected-no-diagnostics
x(int main)24*da8a3b90SDavide Italiano void x(int main) {};
25*da8a3b90SDavide Italiano int y(int main);
26*da8a3b90SDavide Italiano 
27*da8a3b90SDavide Italiano #elif TEST4
28*da8a3b90SDavide Italiano // expected-no-diagnostics
29*da8a3b90SDavide Italiano class A {
30*da8a3b90SDavide Italiano   static int main;
31*da8a3b90SDavide Italiano };
32*da8a3b90SDavide Italiano 
33*da8a3b90SDavide Italiano #elif TEST5
34*da8a3b90SDavide Italiano // expected-no-diagnostics
35*da8a3b90SDavide Italiano template<class T> constexpr T main;
36*da8a3b90SDavide Italiano 
37*da8a3b90SDavide Italiano #elif TEST6
38*da8a3b90SDavide Italiano extern template<class T> constexpr T main; //expected-error{{expected unqualified-id}}
39*da8a3b90SDavide Italiano 
40*da8a3b90SDavide Italiano #elif TEST7
41*da8a3b90SDavide Italiano // expected-no-diagnostics
42*da8a3b90SDavide Italiano namespace foo {
43*da8a3b90SDavide Italiano   int main;
44*da8a3b90SDavide Italiano }
45*da8a3b90SDavide Italiano 
46*da8a3b90SDavide Italiano #elif TEST8
z(void)47*da8a3b90SDavide Italiano void z(void)
48*da8a3b90SDavide Italiano {
49*da8a3b90SDavide Italiano   extern int main;  // expected-error{{main cannot be declared as global variable}}
50*da8a3b90SDavide Italiano }
51*da8a3b90SDavide Italiano 
52*da8a3b90SDavide Italiano #elif TEST9
53*da8a3b90SDavide Italiano // expected-no-diagnostics
q(void)54*da8a3b90SDavide Italiano int q(void)
55*da8a3b90SDavide Italiano {
56*da8a3b90SDavide Italiano   static int main;
57*da8a3b90SDavide Italiano   return main;
58*da8a3b90SDavide Italiano }
59*da8a3b90SDavide Italiano 
60*da8a3b90SDavide Italiano #elif TEST10
61*da8a3b90SDavide Italiano // expected-no-diagnostics
62*da8a3b90SDavide Italiano int main;
63*da8a3b90SDavide Italiano 
64*da8a3b90SDavide Italiano #else
65*da8a3b90SDavide Italiano #error Unknown Test
66*da8a3b90SDavide Italiano #endif
67