Home | History | Annotate | Download | only in basic.start.main
      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 const int main(); // expected-error {{'main' must return 'int'}}
     66 
     67 #elif TEST7
     68 
     69 // expected-no-diagnostics
     70 int main(int argc, const char* const* argv) {
     71 }
     72 
     73 #elif TEST8
     74 
     75 template<typename T>
     76 int main() { } // expected-error{{'main' cannot be a template}}
     77 
     78 #elif TEST9
     79 
     80 constexpr int main() { } // expected-error{{'main' is not allowed to be declared constexpr}}
     81 
     82 #elif TEST10
     83 
     84 // PR15100
     85 // expected-no-diagnostics
     86 typedef char charT;
     87 int main(int, const charT**) {}
     88 
     89 #elif TEST11
     90 
     91 // expected-no-diagnostics
     92 typedef char charT;
     93 int main(int, charT* const *) {}
     94 
     95 #elif TEST12
     96 
     97 // expected-no-diagnostics
     98 typedef char charT;
     99 int main(int, const charT* const *) {}
    100 
    101 #elif TEST13
    102 
    103 int main(void) {}
    104 
    105 template <typename T>
    106 int main(void); // expected-error{{'main' cannot be a template}}
    107 
    108 #elif TEST14
    109 
    110 template <typename T>
    111 int main(void); // expected-error{{'main' cannot be a template}}
    112 
    113 int main(void) {}
    114 
    115 #else
    116 
    117 #error Unknown test mode
    118 
    119 #endif
    120