a1: open array of signed int 
a2: variable length array of signed int 
a4: array of double with dimension of constant expression 3.0 double 
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 constant expression 3 signed int 
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 constant expression 3 signed int 
        Declaration of T: array of signed int with dimension of constant expression 3 signed int 

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

