extern long c; extern int a; extern int b; int foo () { long i; if (a > 7) i = a + 1; else i = b + 1; /* The function call here is necessary to prevent combine throw the sign extension without the need of the see optimisation. */ printf ("i = %l\n",i<<32); c = i<<32; return 1; }