> On Thu, Mar 22, 2012 at 08:54:49AM +0000, Havard Eidnes wrote: >> Module Name: src >> Committed By: he >> Date: Thu Mar 22 08:54:48 UTC 2012 >> >> Modified Files: >> src/lib/libarch/alpha: alpha_pci_io.c >> >> Log Message: >> Add a cast of the shift count to int32_t, so that we don't try >> to do int32_t << long, since ANSI C doesn't perform "balancing" >> before the shift operation according to lint. Should not make a >> difference, offset is limited to 0..3 anyway. > > Again, why is this needed or desirable? Both sides of the operator are > unsigned, so in the worst case, promition happens to the wider of the > type and the result is truncated immediately. The casts are yet again > just making the code uglier.
The comment in lint says: /* * ANSI C does not perform balancing for shift operations, * but traditional C does. If the width of the right operand * is greather than the width of the left operand, than in * traditional C the left operand would be extendet to the * width of the right operand. For SHL this may result in * different results. */ and the corresponding warning from lint is semantics of '<<' change in ANSI C; use explicit cast So that's what I did. If you think lint is wrong, I encourage you to improve it. IMHO, as long as lint is capable of helping us spot actual problems, adding a few of these sorts of constrcucts seems like a small price to pay. Regards, - HÃ¥vard