?=?: function
    with parameters
      pointer to signed int 
      signed int 
    returning 
      signed int 

?*?: function
    with parameters
      signed int 
      signed int 
    returning 
      signed int 

square: forall
      T: type
        with assertions
          ?=?: pointer to function
              with parameters
                pointer to instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 

          ?*?: pointer to function
              with parameters
                instance of type T (not function type) 
                instance of type T (not function type) 
              returning 
                instance of type T (not function type) 


    function
    with parameters
      t: instance of type T (not function type) 
    returning 
      instance of type T (not function type) 
    with body 
      CompoundStmt
                  Return Statement, returning: Cast of:
  Application of
    Variable Expression: ?*?: pointer to function
        with parameters
          instance of type T (not function type) 
          instance of type T (not function type) 
        returning 
          instance of type T (not function type) 

  to arguments
          Variable Expression: t: instance of type T (not function type) 

          Variable Expression: t: instance of type T (not function type) 


to:
  instance of type T (not function type) 
with environment:
  Types:
  Non-types:



quad: forall
      U: type
        with assertions
          ?=?: pointer to function
              with parameters
                pointer to instance of type U (not function type) 
                instance of type U (not function type) 
              returning 
                instance of type U (not function type) 

          square: pointer to function
              with parameters
                instance of type U (not function type) 
              returning 
                instance of type U (not function type) 


    function
    with parameters
      u: instance of type U (not function type) 
    returning 
      instance of type U (not function type) 
    with body 
      CompoundStmt
                  Return Statement, returning: Cast of:
  Application of
    Variable Expression: square: pointer to function
        with parameters
          instance of type U (not function type) 
        returning 
          instance of type U (not function type) 

  to arguments
          Application of
        Variable Expression: square: pointer to function
            with parameters
              instance of type U (not function type) 
            returning 
              instance of type U (not function type) 

      to arguments
                  Variable Expression: u: instance of type U (not function type) 



to:
  instance of type U (not function type) 
with environment:
  Types:
  Non-types:



f: function
      accepting unspecified arguments
    returning 
      nothing 
    with body 
      CompoundStmt
                  Expression Statement:
            Application of
              Variable Expression: quad: forall
                    U: type
                      with assertions
                        ?=?: pointer to function
                            with parameters
                              pointer to instance of type U (not function type) 
                              instance of type U (not function type) 
                            returning 
                              instance of type U (not function type) 

                        square: pointer to function
                            with parameters
                              instance of type U (not function type) 
                            returning 
                              instance of type U (not function type) 


                  function
                  with parameters
                    u: instance of type U (not function type) 
                  returning 
                    instance of type U (not function type) 

            to arguments
              constant expression 7 signed int 
            with inferred parameters:
              ?=?: function
                with parameters
                  pointer to signed int 
                  signed int 
                returning 
                  signed int 

              ?*?: function
                with parameters
                  signed int 
                  signed int 
                returning 
                  signed int 

              ?=?: function
                with parameters
                  pointer to signed int 
                  signed int 
                returning 
                  signed int 

              square: forall
                  T: type
                    with assertions
                      ?=?: pointer to function
                          with parameters
                            pointer to instance of type T (not function type) 
                            instance of type T (not function type) 
                          returning 
                            instance of type T (not function type) 

                      ?*?: pointer to function
                          with parameters
                            instance of type T (not function type) 
                            instance of type T (not function type) 
                          returning 
                            instance of type T (not function type) 


                function
                with parameters
                  t: instance of type T (not function type) 
                returning 
                  instance of type T (not function type) 

            with environment:
              Types:
                _0_U -> signed int 
                _1_T -> signed int 
              Non-types:


int ___operator_assign__Fi_Pii_(int *, int );
int ___operator_multiply__Fi_ii_(int , int );
void __square__A1_0_0____operator_assign__PFt0_Pt0t0____operator_multiply__PFt0_t0t0__Ft0_t0_(void (*_adapterF2tT_2tT2tT_)(void (*)(), void *, void *, void *), void (*_adapterF2tT_P2tT2tT_)(void (*)(), void *, void *, void *), long unsigned int T, void (*___operator_assign__PF2tT_P2tT2tT_)(), void (*___operator_multiply__PF2tT_2tT2tT_)(), void *_retparm, void *__t__2tT){
    _adapterF2tT_2tT2tT_(___operator_multiply__PF2tT_2tT2tT_, _retparm, __t__2tT, __t__2tT);
    return ;
}
void __quad__A1_0_0____operator_assign__PFt0_Pt0t0___square__PFt0_t0__Ft0_t0_(void (*_adapterF2tU_2tU_)(void (*)(), void *, void *), void (*_adapterF2tU_P2tU2tU_)(void (*)(), void *, void *, void *), long unsigned int U, void (*___operator_assign__PF2tU_P2tU2tU_)(), void (*__square__PF2tU_2tU_)(), void *_retparm, void *__u__2tU){
    void *_temp0;
    (_temp0=__builtin_alloca(U));
    _adapterF2tU_2tU_(__square__PF2tU_2tU_, _retparm, (_adapterF2tU_2tU_(__square__PF2tU_2tU_, _temp0, __u__2tU) , _temp0));
    return ;
}
void __f__F__(){
    int _thunk0(int _p0){
        int _temp1;
        void _adapterFi_Pii_(void (*_adaptee)(), void *_ret, void *_p0, void *_p1){
            ((*((int *)_ret))=((int (*)(int *, int ))_adaptee)(_p0, (*((int *)_p1))));
        }
        void _adapterFi_ii_(void (*_adaptee)(), void *_ret, void *_p0, void *_p1){
            ((*((int *)_ret))=((int (*)(int , int ))_adaptee)((*((int *)_p0)), (*((int *)_p1))));
        }
        return (__square__A1_0_0____operator_assign__PFt0_Pt0t0____operator_multiply__PFt0_t0t0__Ft0_t0_(_adapterFi_ii_, _adapterFi_Pii_, sizeof(int ), ((void (*)())___operator_assign__Fi_Pii_), ((void (*)())___operator_multiply__Fi_ii_), (&_temp1), (&_p0)) , _temp1);
    }
    int _temp2;
    int _temp3;
    (_temp3=7);
    void _adapterFi_Pii_(void (*_adaptee)(), void *_ret, void *_p0, void *_p1){
        ((*((int *)_ret))=((int (*)(int *, int ))_adaptee)(_p0, (*((int *)_p1))));
    }
    void _adapterFi_i_(void (*_adaptee)(), void *_ret, void *_p0){
        ((*((int *)_ret))=((int (*)(int ))_adaptee)((*((int *)_p0))));
    }
    (__quad__A1_0_0____operator_assign__PFt0_Pt0t0___square__PFt0_t0__Ft0_t0_(_adapterFi_i_, _adapterFi_Pii_, sizeof(int ), ((void (*)())___operator_assign__Fi_Pii_), ((void (*)())(&_thunk0)), (&_temp2), (&_temp3)) , _temp2);
}
