svn commit: r187693 - head/sys/kern

Christoph Mallon christoph.mallon at
Sun Jan 25 11:11:30 PST 2009

Jeff Roberson schrieb:
> On Sun, 25 Jan 2009, Jeff Roberson wrote:
>> Author: jeff
>> Date: Sun Jan 25 18:38:42 2009
>> New Revision: 187693
>> URL:
>> Log:
>>   - bit has to be fd_mask to work properly on 64bit platforms.  Constants
>>     must also be cast even though the result ultimately is promoted
>>     to 64bit.
>>   - Correct a loop index upper bound in selscan().
> Sorry about that, should've tested my earlier patch for more than a 
> couple of days.  I seldom remember c's integer promotion rules as they 
> relate to constants.  You'd think they'd make it easy on us and just 
> promote it to the largest type in the expression/lvalue.  I'm not sure 
> why they don't. Perhaps the more careful among you knows the answer.

The rule for operations is quite simple: An operation never cares for 
the type of its user. It only uses the type of the operand(s) to 
determine its result type. So for a = b + c the type of the result of + 
only depends on the types of b and c, but never on a.
Integer literals have a bit ugly rules what type they are: It depends on 
the base (!) and on the magnitude of the literal.
If in doubt and you need a specific type (and maybe making it more clear 
for a reader) then cast.

More information about the svn-src-head mailing list