a1: open array of signed int 
a2: variable length array of signed int 
a4: array of double with dimension of   Cast of:
constant expression 3.0 double 
  to:
    long unsigned int 
  with environment:
    Types:
    Non-types:

m1: open array of array of signed int with dimension of constant expression 3 signed int 
m2: variable length array of variable length array of signed int 
m4: array of array of signed int with dimension of constant expression 3 signed int with dimension of   Cast of:
constant expression 3 signed int 
  to:
    long unsigned int 
  with environment:
    Types:
    Non-types:

fred: function
      accepting unspecified arguments
    returning 
      signed int 
    with body 
      CompoundStmt
        Declaration of a1: open array of signed int 
        Declaration of a2: variable length array of signed int 
        Declaration of a4: array of signed int with dimension of           Cast of:
constant expression 3 signed int 
          to:
            long unsigned int 
          with environment:
            Types:
            Non-types:

        Declaration of T: array of signed int with dimension of           Cast of:
constant expression 3 signed int 
          to:
            long unsigned int 
          with environment:
            Types:
            Non-types:


mary: function
    with parameters
      T: pointer to array of constant expression 3 signed int signed int 
      p1: const pointer to array of constant expression 3 signed int signed int 
      p2: pointer to static array of constant expression 3 signed int signed int 
      p3: const pointer to static array of constant expression 3 signed int signed int 
    returning 
      signed int 
    with body 
      CompoundStmt

tom: function
      accepting unspecified arguments
    returning 
      pointer to array of signed int with dimension of constant expression 3 signed int 
    with body 
      CompoundStmt

jane: function
      accepting unspecified arguments
    returning 
      pointer to function
          with parameters
            T: pointer to array of constant expression 3 signed int signed int 
            p1: const pointer to array of constant expression 3 signed int signed int 
            p2: pointer to static array of constant expression 3 signed int signed int 
            p3: const pointer to static array of constant expression 3 signed int signed int 
          returning 
            signed int 

    with body 
      CompoundStmt

int __a1__A0i[];
int __a2__A0i[*];
double __a4__A0d[((long unsigned int )3.0)];
int __m1__A0A0i[][3];
int __m2__A0A0i[*][*];
int __m4__A0A0i[((long unsigned int )3)][3];
int __fred__Fi__(){
    int __a1__A0i[];
    int __a2__A0i[*];
    int __a4__A0i[((long unsigned int )3)];
    int __T__A0i[((long unsigned int )3)];
}
int __mary__Fi_PiCPiPiCPi_(int __T__Pi[3], int __p1__CPi[const 3], int __p2__Pi[static 3], int __p3__CPi[static const 3]){
}
int (*__tom__FPA0i__())[3]{
}
int (*__jane__FPFi_PiCPiPiCPi___())(int __T__Pi[3], int __p1__CPi[const 3], int __p2__Pi[static 3], int __p3__CPi[static const 3]){
}
