32 lines
730 B
C
32 lines
730 B
C
typedef signed int s32;
|
|
typedef signed long s64;
|
|
typedef unsigned int u32;
|
|
typedef unsigned long u64;
|
|
|
|
extern __inline__ u32 foobar(int logmask)
|
|
{
|
|
u32 ret = ~(1 << logmask); // fails
|
|
// s32 ret = ~(1 << logmask); // ok
|
|
// u64 ret = ~(1 << logmask); // ok
|
|
// s64 ret = ~(1 << logmask); // ok
|
|
return ret;
|
|
}
|
|
|
|
// This procedure compiles fine...
|
|
u32 good(u32 var)
|
|
{
|
|
var = foobar(0);
|
|
return var;
|
|
}
|
|
|
|
// This procedure does not compile...
|
|
// Same as above, but formal parameter is a pointer
|
|
// Both good() and fails() compile ok if we choose
|
|
// a different type for "ret" in foobar().
|
|
u32 fails(u32 *var)
|
|
{
|
|
*var = foobar(0);
|
|
return *var;
|
|
}
|
|
|