Clang Project

clang_source_code/test/Sema/warn-extern-main.c
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// RUN: %clang_cc1 -fsyntax-only -verify %s -DTEST9 -ffreestanding
10
11#if TEST1
12int main; // expected-warning{{variable named 'main' with external linkage has undefined behavior}}
13
14#elif TEST2
15extern int main; // expected-warning{{variable named 'main' with external linkage has undefined behavior}}
16
17#elif TEST3
18// expected-no-diagnostics
19void x() {
20  static int main;
21}
22
23#elif TEST4
24void x() {
25  extern int main; // expected-warning{{variable named 'main' with external linkage has undefined behavior}}
26}
27
28#elif TEST5
29// expected-no-diagnostics
30void x() {
31  int main;
32}
33
34#elif TEST6
35// expected-no-diagnostics
36static int main;
37
38#elif TEST7
39// expected-no-diagnostics
40void x() {
41  auto int main;
42}
43
44#elif TEST8
45// expected-no-diagnostics
46void x() {
47  register int main;
48}
49
50#elif TEST9
51// expected-no-diagnostics
52int main;
53
54#else
55#error Unknown Test
56#endif
57