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