1*31875a0aSRichard Smith // RUN: %clang_cc1 -verify %s -pedantic-errors
2*31875a0aSRichard Smith // RUN: %clang_cc1 -verify %s -pedantic-errors -DINLINE
3*31875a0aSRichard Smith // RUN: %clang_cc1 -verify %s -pedantic-errors -DSTATIC
4*31875a0aSRichard Smith // RUN: %clang_cc1 -verify %s -pedantic-errors -std=c++11 -DCONSTEXPR
5*31875a0aSRichard Smith // RUN: %clang_cc1 -verify %s -std=c++11 -DDELETED
6*31875a0aSRichard Smith 
7*31875a0aSRichard Smith #if INLINE
8*31875a0aSRichard Smith inline // expected-error {{'main' is not allowed to be declared inline}}
9*31875a0aSRichard Smith #elif STATIC
10*31875a0aSRichard Smith static // expected-error {{'main' is not allowed to be declared static}}
11*31875a0aSRichard Smith #elif CONSTEXPR
12*31875a0aSRichard Smith constexpr // expected-error {{'main' is not allowed to be declared constexpr}}
13*31875a0aSRichard Smith #endif
14*31875a0aSRichard Smith int main(int argc, char **argv)
15*31875a0aSRichard Smith #if DELETED
16*31875a0aSRichard Smith   = delete; // expected-error {{'main' is not allowed to be deleted}}
17*31875a0aSRichard Smith #else
18*31875a0aSRichard Smith {
19*31875a0aSRichard Smith   int (*pmain)(int, char**) = &main; // expected-error {{ISO C++ does not allow 'main' to be used by a program}}
20*31875a0aSRichard Smith 
21*31875a0aSRichard Smith   if (argc)
22*31875a0aSRichard Smith     main(0, 0); // expected-error {{ISO C++ does not allow 'main' to be used by a program}}
23*31875a0aSRichard Smith }
24*31875a0aSRichard Smith #endif
25