int x;
typedef double y;
typedef float t;
y z;
type u = struct { int a; double b; };
int f( int y );
y q;

y w(y y, u v) {
    type x | { x t(u); };
    u u = y;
    x z = t(u);
}

y p;

context has_u( type z )
{
  forall( type t ) z u(t);
};

forall( type t | has_u( t ) )
y q( t the_t )
{
    t y = u( the_t );
}

t f( y p ) {
    int y;
    typedef char x;

    {
	x y;
	typedef x z;

	{
	    z x;
	    typedef z y;
	    y z = x;
	}

	z x = y;
    }

    x q = y;
}

t g( void ) {
    typedef char x;
    try {
	some_func();
    } catch ( x x ) {
	t y = x;
    }
    x z;
}

y q(i)							/* K&R style */
    int i;
{
    switch (i) {
	y q = i;
      case 0:
	return q;
      default:
	return i;
    }
}
