// "./cfa specialize.c" // "./cfa -g simple.c" // "./cfa -CFA simple.c > simple_out.c" /// void f( const int * ); /// /// void m() /// { /// f( 0 ); /// } /// forall( dtype T ) T* f( T* ); /// void g( int* (*)(int*) ); /// /// int m() { /// g( f ); /// } /// void f1( void (*q)( forall( dtype U ) U* (*p)( U* ) ) ); /// void g1( int* (*)(int*) ); /// /// int m1() { /// f1( g1 ); /// } extern "C" { int printf( const char*, ... ); } forall( type T ) T f( T t ) { printf( "in f; sizeof T is %d\n", sizeof( T ) ); return t; } void g( int (*p)(int) ) { printf( "g: f(7) returned %d\n", f(7) ); } int main() { g( f ); }