From: julia.lawall@lip6.fr (Julia Lawall)
To: cocci@systeme.lip6.fr
Subject: [Cocci] coccinelle and bitmask arithmetic (was: Re: [patch] TTY: synclink, small cleanup in dtr_rts())
Date: Tue, 29 Jan 2013 17:19:43 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.02.1301291717530.3339@hadrien> (raw)
In-Reply-To: <1359475998.4196.26.camel@joe-AO722>
On Tue, 29 Jan 2013, Joe Perches wrote:
> On Tue, 2013-01-29 at 10:55 -0500, Valdis.Kletnieks at vt.edu wrote:
> > On Sun, 27 Jan 2013 23:19:47 +0300, Dan Carpenter said:
> >
> > > Yeah. I think it would be, but adding bitflags together instead of
> > > doing bitwise ORs is very common as well.
> >
> > The fact it's common doesn't mean it's good programming practice,
> > or even correct. Consider:
> >
> > #define F_FOO 0x01
> > #define F_BAR 0x02
> > #define F_BAZ 0x04
> >
> > unsigned int flags = F_FOO;
> > ...
> > flags |= F_BAR;
> >
> > Now some time later, another code path does this:
> >
> > flags += F_FOO;
> >
> > If it was another |, it would be a no harm no foul class of bug.
> > But how long is it going to take you to figure out who set F_BAZ?
> >
> > I wonder if there's a way to write a coccinelle patch to find places
> > where we do arithmetic operations on bitmasks....
>
> Not so far as I know, but maybe someone on the
> cocci lists does. (cc'd)
>
> I could imagine a test for variables that have
> uses of both arithmetic and bit operations but
> not a discriminator for when one type is
> appropriate and the other is not.
If the definition of a bitmask is an identifier in all capital letters,
that would be easy. Another possibility is such an identifier that is
defined to a value expressed beginning with 0x. Another possibility is
such an identifier that is sometimes used with & and | and sometimes used
with an arithmetic operation. I will give them a try.
julia
WARNING: multiple messages have this Message-ID (diff)
From: Julia Lawall <julia.lawall@lip6.fr>
To: cocci@systeme.lip6.fr
Subject: Re: coccinelle and bitmask arithmetic (was: Re: [patch] TTY: synclink, small cleanup in dtr_rts())
Date: Tue, 29 Jan 2013 16:19:43 +0000 [thread overview]
Message-ID: <alpine.DEB.2.02.1301291717530.3339@hadrien> (raw)
In-Reply-To: <1359475998.4196.26.camel@joe-AO722>
On Tue, 29 Jan 2013, Joe Perches wrote:
> On Tue, 2013-01-29 at 10:55 -0500, Valdis.Kletnieks@vt.edu wrote:
> > On Sun, 27 Jan 2013 23:19:47 +0300, Dan Carpenter said:
> >
> > > Yeah. I think it would be, but adding bitflags together instead of
> > > doing bitwise ORs is very common as well.
> >
> > The fact it's common doesn't mean it's good programming practice,
> > or even correct. Consider:
> >
> > #define F_FOO 0x01
> > #define F_BAR 0x02
> > #define F_BAZ 0x04
> >
> > unsigned int flags = F_FOO;
> > ...
> > flags |= F_BAR;
> >
> > Now some time later, another code path does this:
> >
> > flags += F_FOO;
> >
> > If it was another |, it would be a no harm no foul class of bug.
> > But how long is it going to take you to figure out who set F_BAZ?
> >
> > I wonder if there's a way to write a coccinelle patch to find places
> > where we do arithmetic operations on bitmasks....
>
> Not so far as I know, but maybe someone on the
> cocci lists does. (cc'd)
>
> I could imagine a test for variables that have
> uses of both arithmetic and bit operations but
> not a discriminator for when one type is
> appropriate and the other is not.
If the definition of a bitmask is an identifier in all capital letters,
that would be easy. Another possibility is such an identifier that is
defined to a value expressed beginning with 0x. Another possibility is
such an identifier that is sometimes used with & and | and sometimes used
with an arithmetic operation. I will give them a try.
julia
WARNING: multiple messages have this Message-ID (diff)
From: Julia Lawall <julia.lawall@lip6.fr>
To: Joe Perches <joe@perches.com>
Cc: Valdis.Kletnieks@vt.edu, cocci@systeme.lip6.fr,
Dan Carpenter <dan.carpenter@oracle.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Jiri Slaby <jslaby@suse.cz>, Paul Fulghum <paulkf@microgate.com>,
David Howells <dhowells@redhat.com>,
linux-kernel@vger.kernel.org, kernel-janitors@vger.kernel.org
Subject: Re: coccinelle and bitmask arithmetic (was: Re: [patch] TTY: synclink, small cleanup in dtr_rts())
Date: Tue, 29 Jan 2013 17:19:43 +0100 (CET) [thread overview]
Message-ID: <alpine.DEB.2.02.1301291717530.3339@hadrien> (raw)
In-Reply-To: <1359475998.4196.26.camel@joe-AO722>
On Tue, 29 Jan 2013, Joe Perches wrote:
> On Tue, 2013-01-29 at 10:55 -0500, Valdis.Kletnieks@vt.edu wrote:
> > On Sun, 27 Jan 2013 23:19:47 +0300, Dan Carpenter said:
> >
> > > Yeah. I think it would be, but adding bitflags together instead of
> > > doing bitwise ORs is very common as well.
> >
> > The fact it's common doesn't mean it's good programming practice,
> > or even correct. Consider:
> >
> > #define F_FOO 0x01
> > #define F_BAR 0x02
> > #define F_BAZ 0x04
> >
> > unsigned int flags = F_FOO;
> > ...
> > flags |= F_BAR;
> >
> > Now some time later, another code path does this:
> >
> > flags += F_FOO;
> >
> > If it was another |, it would be a no harm no foul class of bug.
> > But how long is it going to take you to figure out who set F_BAZ?
> >
> > I wonder if there's a way to write a coccinelle patch to find places
> > where we do arithmetic operations on bitmasks....
>
> Not so far as I know, but maybe someone on the
> cocci lists does. (cc'd)
>
> I could imagine a test for variables that have
> uses of both arithmetic and bit operations but
> not a discriminator for when one type is
> appropriate and the other is not.
If the definition of a bitmask is an identifier in all capital letters,
that would be easy. Another possibility is such an identifier that is
defined to a value expressed beginning with 0x. Another possibility is
such an identifier that is sometimes used with & and | and sometimes used
with an arithmetic operation. I will give them a try.
julia
next prev parent reply other threads:[~2013-01-29 16:19 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-01-27 19:40 [patch] TTY: synclink, small cleanup in dtr_rts() Dan Carpenter
2013-01-27 19:40 ` Dan Carpenter
2013-01-27 20:04 ` Joe Perches
2013-01-27 20:04 ` Joe Perches
2013-01-27 20:16 ` Jiri Slaby
2013-01-27 20:16 ` Jiri Slaby
2013-01-27 20:19 ` Dan Carpenter
2013-01-27 20:19 ` Dan Carpenter
2013-01-27 21:00 ` Joe Perches
2013-01-27 21:00 ` Joe Perches
[not found] ` <C8AFB2C4-4974-4265-A41C-A56C71784F39@microgate.com>
2013-01-28 2:21 ` [PATCH] TTY: synclink: Convert + to | for bit operations Joe Perches
2013-01-28 2:21 ` Joe Perches
2013-01-28 12:06 ` [patch] TTY: synclink, small cleanup in dtr_rts() walter harms
2013-01-28 12:06 ` walter harms
2013-01-29 15:55 ` Valdis.Kletnieks
2013-01-29 15:55 ` Valdis.Kletnieks
2013-01-29 16:13 ` [Cocci] coccinelle and bitmask arithmetic (was: Re: [patch] TTY: synclink, small cleanup in dtr_rts()) Joe Perches
2013-01-29 16:13 ` Joe Perches
2013-01-29 16:13 ` Joe Perches
2013-01-29 16:19 ` Julia Lawall [this message]
2013-01-29 16:19 ` Julia Lawall
2013-01-29 16:19 ` Julia Lawall
2013-01-29 16:31 ` [Cocci] " Joe Perches
2013-01-29 16:31 ` Joe Perches
2013-01-29 16:31 ` Joe Perches
2013-01-29 17:30 ` [Cocci] " Dan Carpenter
2013-01-29 17:30 ` Dan Carpenter
2013-01-29 17:42 ` [Cocci] " Dan Carpenter
2013-01-29 17:42 ` Dan Carpenter
2013-01-29 17:42 ` Dan Carpenter
2013-01-29 17:49 ` [Cocci] " Julia Lawall
2013-01-29 17:49 ` Julia Lawall
2013-01-29 17:49 ` Julia Lawall
2013-01-29 18:03 ` [Cocci] " Joe Perches
2013-01-29 18:03 ` Joe Perches
2013-01-29 18:03 ` Joe Perches
2013-01-30 8:21 ` [Cocci] coccinelle and bitmask arithmetic walter harms
2013-01-30 8:21 ` walter harms
2013-01-30 8:21 ` walter harms
2013-01-30 8:29 ` [Cocci] " Joe Perches
2013-01-30 8:29 ` Joe Perches
2013-01-30 8:29 ` Joe Perches
2013-01-30 11:14 ` [Cocci] " Russell King - ARM Linux
2013-01-30 11:14 ` Russell King - ARM Linux
2013-01-30 11:14 ` Russell King - ARM Linux
2013-01-30 11:21 ` [Cocci] " Julia Lawall
2013-01-30 11:21 ` Julia Lawall
2013-01-30 11:21 ` Julia Lawall
2013-01-30 11:35 ` [Cocci] " Russell King - ARM Linux
2013-01-30 11:35 ` Russell King - ARM Linux
2013-01-30 11:35 ` Russell King - ARM Linux
2013-01-30 16:53 ` [Cocci] " Joe Perches
2013-01-30 16:53 ` Joe Perches
2013-01-30 16:53 ` Joe Perches
2013-01-30 18:23 ` [Cocci] " Russell King - ARM Linux
2013-01-30 18:23 ` Russell King - ARM Linux
2013-01-30 18:23 ` Russell King - ARM Linux
2013-01-29 18:38 ` [Cocci] coccinelle and bitmask arithmetic (was: Re: [patch] TTY: synclink, small cleanup in dtr_rts()) Julia Lawall
2013-01-29 18:38 ` Julia Lawall
2013-01-29 18:38 ` Julia Lawall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.02.1301291717530.3339@hadrien \
--to=julia.lawall@lip6.fr \
--cc=cocci@systeme.lip6.fr \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.