Less commas
Patrick Kreft
patrick_kreft at gmx.net
Mon Jan 3 16:26:13 PST 2011
On Sun, 02 Jan 2011 21:04:07 +0100, Walter Bright
<newshound2 at digitalmars.com> wrote:
> bearophile wrote:
>> A common bug in Linux kernel:
>> if(!state->card->
>> ac97_status&CENTER_LFE_ON)
>> val&=~DSP_BIND_CENTER_LFE;
>> The fix is to replace (!E & C) with (!(E & C)).
>> Currently D acts like C:
>> void main() {
>> uint x, y;
>> if (!x & y) {}
>> }
>> - 96 instances of this bug in Linux from 2.6.13 (August 2005) to
>> v2.6.28 (December 2008).
>> - 58 instances of this bug in 2.6.20 (February 2007)
>> - 2 in Linux-next (October 10, 2009)
>> They have faced and reduced the number of such bugs using Coccinelle,
>> see pages 8-9 here:
>> http://coccinelle.lip6.fr/papers/fosdem10.pdf
>
> This is great stuff, bearophile. Thanks for finding that. Please add
> this as an enhancement request to bugzilla (disallowing (!x&y)
> expressions).
The false-positive are shown in the presentation ... okey it's was irony,
or not? Better is that:
let is = func[T](state: ref const T, of: val T -> bool):
return !(state & of)
if(is(state=obj.flag, of=MAYBE_THIS_STATE)):
...
More information about the Digitalmars-d
mailing list