From: Joe Perches <joe@perches.com>
To: "Julia Lawall" <julia.lawall@lip6.fr>,
"Christian König" <christian.koenig@amd.com>
Cc: Alex Deucher <alexander.deucher@amd.com>,
Dave Airlie <airlied@redhat.com>,
kbuild-all@01.org, dri-devel@lists.freedesktop.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/amdgpu: fix compare_const_fl.cocci warnings
Date: Fri, 15 Apr 2016 08:50:28 -0700 [thread overview]
Message-ID: <1460735428.19090.23.camel@perches.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1604151617370.3050@hadrien>
On Fri, 2016-04-15 at 16:20 +0200, Julia Lawall wrote:
> On Fri, 15 Apr 2016, Christian König wrote:
> > Am 15.04.2016 um 09:15 schrieb Julia Lawall:
> > > Move constants to the right of binary operators.
> > >
> > > Generated by: scripts/coccinelle/misc/compare_const_fl.cocci
> > >
> > > Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
> > > Signed-off-by: Julia Lawall <julia.lawall@lip6.fr>
> >
> > In general the patch looks ok, but do we have a documented preference where to
> > place constants in the coding style docs?
> >
> > While it's not so much of a problem any more with modern compilers, some
> > people still prefer to have it on the left side to catch accidental value
> > assignments.
>
> I don't know if it is documented. Joe Perches suggested that on the right
> was better in general - maybe he knows if this is written somewhere.
>
> There are 504 occurrences of NULL == in the kernel, and 19524 occurrences
> of == NULL.
A long time ago Linus wrote:
> On Wed, 2004-03-10 at 18:36, Linus Torvalds wrote:
> > > The kind of bug that the "0 == x" syntax protects against
> > > is LESS LIKELY to happen than the kind of bug it tends to cause.
> >
> > Not my experience. I'd personally prefer a stated preference for.
> >
> > (lvalue == rvalue) vs (rvalue == lvalue)
>
> The thing is, your "vs" above makes no sense.
>
> Quite often, both sides are rvalues, or lvalues. In fact, often you may
> not even know from a simple syntactic look which one either side is, since
> they can be macros etc.
>
> So asking for consistency is just impossible, because the exact same
> expression may semantically parse as either depending on things like
> macros that have architectural dependencies.
>
> So the rule would have to be something like this:
> - if one side is _obviously_ a lvalue, and the other side is _obviously_
> a rvalue, then do X.
>
> That kind of rule makes very little sense, but if you want a stated
> preference, then my preference is to say that in that obvious case, the
> lvalue comes on the left side, and the rvalue comes on the right side.
>
> Why? Because that is literally how people think. People have been taught
> since before first grade to think "if I have 8 apples, and I give Tom one
> apple, how many apples do I have".
>
> Notice how I didn't say "if 8 applies is what I have.."
>
> The reason for "if (x == 8)" comes from the way we're taught to think.
> Arguing against that _fact_ is just totally non-productive, and you have
> to _force_ yourself to write it the other way around.
>
> And that just means that you will do other mistakes. You'll spend your
> time thinking about trying to express your conditionals in strange ways,
> and then not think about the _real_ issue.
>
> So let's make a few rules:
>
> - write your logical expressions the way people EXPECT them to be
> written. No silly rules that make no sense.
>
> Ergo:
>
> if (x == 8)
>
> is the ONE AND ONLY SANE WAY.
>
> - avoid using assignment inside logical expressions unless you have a
> damn good reason to.
>
> Ergo: write
>
> error = myfunction(xxxx)
> if (error) {
> ...
>
> instead of writing
>
> if (error = myfunction(xxxx))
> ....
>
> which is just unreadable and stupid.
>
> - Don't get hung about stupid rules.
>
> Ergo: sometimes assignments in conditionals make sense, especially in
> loops. Don't avoid them just because of some silly rule. But strive to
> use an explicit equality test when you do so:
>
> while ((a = function(b)) != 0)
> ...
>
> is fine.
>
> - The compiler warns about the mistakes that remain, if you follow these
> rules.
>
> - mistakes happen. Deal with it. Having tons of rules just makes them
> more likely. Expect mistakes, and make sure they are fixed quickly.
>
> Is that "stated preference" enough?
>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
WARNING: multiple messages have this Message-ID (diff)
From: Joe Perches <joe@perches.com>
To: "Julia Lawall" <julia.lawall@lip6.fr>,
"Christian König" <christian.koenig@amd.com>
Cc: Dave Airlie <airlied@redhat.com>,
kbuild-all@01.org, Alex Deucher <alexander.deucher@amd.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] drm/amdgpu: fix compare_const_fl.cocci warnings
Date: Fri, 15 Apr 2016 08:50:28 -0700 [thread overview]
Message-ID: <1460735428.19090.23.camel@perches.com> (raw)
In-Reply-To: <alpine.DEB.2.10.1604151617370.3050@hadrien>
On Fri, 2016-04-15 at 16:20 +0200, Julia Lawall wrote:
> On Fri, 15 Apr 2016, Christian König wrote:
> > Am 15.04.2016 um 09:15 schrieb Julia Lawall:
> > > Move constants to the right of binary operators.
> > >
> > > Generated by: scripts/coccinelle/misc/compare_const_fl.cocci
> > >
> > > Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
> > > Signed-off-by: Julia Lawall <julia.lawall@lip6.fr>
> >
> > In general the patch looks ok, but do we have a documented preference where to
> > place constants in the coding style docs?
> >
> > While it's not so much of a problem any more with modern compilers, some
> > people still prefer to have it on the left side to catch accidental value
> > assignments.
>
> I don't know if it is documented. Joe Perches suggested that on the right
> was better in general - maybe he knows if this is written somewhere.
>
> There are 504 occurrences of NULL == in the kernel, and 19524 occurrences
> of == NULL.
A long time ago Linus wrote:
> On Wed, 2004-03-10 at 18:36, Linus Torvalds wrote:
> > > The kind of bug that the "0 == x" syntax protects against
> > > is LESS LIKELY to happen than the kind of bug it tends to cause.
> >
> > Not my experience. I'd personally prefer a stated preference for.
> >
> > (lvalue == rvalue) vs (rvalue == lvalue)
>
> The thing is, your "vs" above makes no sense.
>
> Quite often, both sides are rvalues, or lvalues. In fact, often you may
> not even know from a simple syntactic look which one either side is, since
> they can be macros etc.
>
> So asking for consistency is just impossible, because the exact same
> expression may semantically parse as either depending on things like
> macros that have architectural dependencies.
>
> So the rule would have to be something like this:
> - if one side is _obviously_ a lvalue, and the other side is _obviously_
> a rvalue, then do X.
>
> That kind of rule makes very little sense, but if you want a stated
> preference, then my preference is to say that in that obvious case, the
> lvalue comes on the left side, and the rvalue comes on the right side.
>
> Why? Because that is literally how people think. People have been taught
> since before first grade to think "if I have 8 apples, and I give Tom one
> apple, how many apples do I have".
>
> Notice how I didn't say "if 8 applies is what I have.."
>
> The reason for "if (x == 8)" comes from the way we're taught to think.
> Arguing against that _fact_ is just totally non-productive, and you have
> to _force_ yourself to write it the other way around.
>
> And that just means that you will do other mistakes. You'll spend your
> time thinking about trying to express your conditionals in strange ways,
> and then not think about the _real_ issue.
>
> So let's make a few rules:
>
> - write your logical expressions the way people EXPECT them to be
> written. No silly rules that make no sense.
>
> Ergo:
>
> if (x == 8)
>
> is the ONE AND ONLY SANE WAY.
>
> - avoid using assignment inside logical expressions unless you have a
> damn good reason to.
>
> Ergo: write
>
> error = myfunction(xxxx)
> if (error) {
> ...
>
> instead of writing
>
> if (error = myfunction(xxxx))
> ....
>
> which is just unreadable and stupid.
>
> - Don't get hung about stupid rules.
>
> Ergo: sometimes assignments in conditionals make sense, especially in
> loops. Don't avoid them just because of some silly rule. But strive to
> use an explicit equality test when you do so:
>
> while ((a = function(b)) != 0)
> ...
>
> is fine.
>
> - The compiler warns about the mistakes that remain, if you follow these
> rules.
>
> - mistakes happen. Deal with it. Having tons of rules just makes them
> more likely. Expect mistakes, and make sure they are fixed quickly.
>
> Is that "stated preference" enough?
>
next prev parent reply other threads:[~2016-04-15 15:50 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-15 7:15 [PATCH] drm/amdgpu: fix compare_const_fl.cocci warnings Julia Lawall
2016-04-15 7:15 ` Julia Lawall
2016-04-15 8:46 ` Christian König
2016-04-15 8:46 ` Christian König
2016-04-15 14:20 ` Julia Lawall
2016-04-15 14:20 ` Julia Lawall
2016-04-15 15:14 ` Emil Velikov
2016-04-15 15:14 ` Emil Velikov
2016-04-15 15:50 ` Joe Perches [this message]
2016-04-15 15:50 ` Joe Perches
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=1460735428.19090.23.camel@perches.com \
--to=joe@perches.com \
--cc=airlied@redhat.com \
--cc=alexander.deucher@amd.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=julia.lawall@lip6.fr \
--cc=kbuild-all@01.org \
--cc=linux-kernel@vger.kernel.org \
/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.