extern void abort (void); int main () { int i, j; unsigned long u, r1, r2; i = -16; j = 1; u = i + j; /* no sign extension upon shift */ r1 = u >> 1; /* sign extension upon shift, but there shouldn't be */ r2 = ((unsigned long) (i + j)) >> 1; if (r1 != r2) abort (); return 0; }