1 typedef signed int s32; 2 typedef signed long s64; 3 typedef unsigned int u32; 4 typedef unsigned long u64; 5 foobar(int logmask)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... good(u32 var)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(). fails(u32 * var)26u32 fails(u32 *var) 27 { 28 *var = foobar(0); 29 return *var; 30 } 31 32