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