Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tests/array.cfa

    r8a919cf r53692b3  
    1515//
    1616
    17 // Tests syntax.  Comments explain semantics.  Test does not show semantics.
    18 // Mostly illustrates facts about C (with which CFA is being tested to agree).
    19 // Is a test oracle under `gcc -x c`.
     17int a1[0];
     18//int a2[*];
     19//double a4[3.0];
    2020
    21 #ifdef ERR1
    22 #define E1(...) __VA_ARGS__
    23 #else
    24 #define E1(...)
    25 #endif
     21int m1[0][3];
     22//int m2[*][*];
     23int m4[3][3];
    2624
    27 #ifdef ERR2
    28 #define E2(...) __VA_ARGS__
    29 #else
    30 #define E2(...)
    31 #endif
     25typedef int T;
    3226
    33 #ifdef ERR3
    34 #define E3(...) __VA_ARGS__
    35 #else
    36 #define E3(...)
    37 #endif
     27int fred() {
     28//      int a1[];
     29//      int a2[*];
     30        int a4[3];
     31        int T[3];
     32}
    3833
    39     int a1[0];
    40 E1( int a2[*];       )
    41                                                         #ifndef __cforall
    42 E1( double a4[3.0];  )                                  // BUG 275: CFA accepts but should reject
    43                                                         #endif
     34int mary( int T[3],
     35                  int p1[const 3],
     36                  int p2[static 3],
     37                  int p3[static const 3]
     38        ) {
     39}
    4440
    45     int m1[0][3];
    46 E1( int m2[*][*];    )
    47     int m4[3][3];
     41int (*tom())[3] {
     42}
    4843
    49     typedef int T;
    50 
    51     int fred(int n) {
    52 E1(     int a1[];    )
    53 E1(     int a2[*];   )
    54         int a4[3];
    55         int T[3];
    56         int a5[n];
    57     }
    58 
    59     int mary( int T[3],                                 // same as: int *T
    60               int p1[const 3],                          // same as: int const *p1
    61               int p2[static 3],                         // same as T, but length >=3 checked
    62               int p3[static const 3]                    // both above: 3 is static, p3 is const
    63         ) {
    64     }
    65 
    66     // function taking (), returning pointer to array of ints
    67     int (*tom())[3] {
    68     }
    69 
    70     // function taking (), returning pointer to function of same type as mary
    71     int (*(jane)())( int T[3],
    72                      int p1[const 3],
    73                      int p2[static 3],
    74                      int p3[static const 3]
    75         ) {
    76     }
    77 
    78     // functions returning same exotic pointers, in CFA's non-onion syntax
    79     #ifdef __cforall
    80     [ * [3] int ] toms_twin(...) {
    81     }
    82     [ * [int]( [3] int T,
    83             [const 3] int p1,
    84             [static 3] int p2,
    85             [static const 3] int p3
    86             )
    87     ] janes_twin(...) {
    88     }
    89     #endif
    90 
    91 
    92 //  int fm1( int, int, int[][*] );                      // TODO: investigate gcc-11 warning
    93 //  int fm1( int r, int c, int m[][c] ) {}
    94     int fm2( int r, int c, int (*m)[c] ) {}             // same as fm1
    95 E2( int fm3( int r, int c, int m[][static c] ) {}  )    // that's not static
    96 E3( int fm4( int r, int c, int m[][] );            )    // m's immediate element type is incomplete
    97     int fm5( int, int, int[*][*] );                     // same as fm1 decl
    98                                                         #ifndef __cforall
    99     int fm5( int r, int c, int m[r][c] ) {}             // BUG 276: CFA chokes but should accept
    100                                                         // C: same as fm1 defn
    101                                                         #endif
    102 
     44int (*(jane)())( int T[3],
     45                                 int p1[const 3],
     46                                 int p2[static 3],
     47                                 int p3[static const 3]
     48        ) {
     49}
    10350
    10451int main() {
    105     #pragma GCC warning "Preprocessor started"          // force non-empty .expect file, NO TABS!!!
     52    #pragma GCC warning "Compiled"                      // force non-empty .expect file, NO TABS!!!
    10653}
    10754
Note: See TracChangeset for help on using the changeset viewer.