int x(void) {
  typedef int I;
  {
    int I;
    // Syntax is ambiguous unless we know whether I is a variable or a derived type name.
    // If we attempt to parse C 'program-at-a-time' instead of 'statement-at-a-time' then
    // we cannot (easily) know if I is a variable or a typename at parse time.
    int J = (I) - 1;  //  Here it is a variable.
  }
    int J = (I) - 1;  //  Here it is a typedef.
}
