1typedef signed int s32; 2typedef signed long s64; 3typedef unsigned int u32; 4typedef unsigned long u64; 5 6extern __inline__ u32 foobar(int logmask) 7{ 8 u32 ret = ~(1 << logmask); // fails 9 // s32 ret = ~(1 << logmask); // ok 10 // u64 ret = ~(1 << logmask); // ok 11 // s64 ret = ~(1 << logmask); // ok 12 return ret; 13} 14 15// This procedure compiles fine... 16u32 good(u32 var) 17{ 18 var = foobar(0); 19 return var; 20} 21 22// This procedure does not compile... 23// Same as above, but formal parameter is a pointer 24// Both good() and fails() compile ok if we choose 25// a different type for "ret" in foobar(). 26u32 fails(u32 *var) 27{ 28 *var = foobar(0); 29 return *var; 30} 31 32