// "cfa-cpp -nx Abstype.c"

type T | { T x( T ); };

T y( T t ) {
    T t_instance;
    return x( t );
}

forall(type T) lvalue T	*?( T* );
int ?++( int *);
int ?=?( int*, int );
forall(dtype DT) DT* ?=?( DT **, DT* );

type U = int*;

U x( U u ) {
    U u_instance = u;
    (*u)++;
    return u;
}

int *break_abstraction( U u ) {
    return u;
}
