* [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of
@ 2008-02-26 20:44 ` Julia Lawall
0 siblings, 0 replies; 35+ messages in thread
From: Julia Lawall @ 2008-02-26 20:44 UTC (permalink / raw)
To: yi.zhu, linux-wireless, ipw3945-devel, linux-kernel,
kernel-janitors
From: Julia Lawall <julia@diku.dk>
In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed that
involved converting !x & y to !(x & y). The code below shows the same
pattern, and thus should perhaps be fixed in the same way.
This is not tested and clearly changes the semantics, so it is only
something to consider.
The semantic patch that makes this change is as follows:
(http://www.emn.fr/x-info/coccinelle/)
// <smpl>
@@ expression E1,E2; @@
(
!E1 & !E2
|
- !E1 & E2
+ !(E1 & E2)
)
// </smpl>
Signed-off-by: Julia Lawall <julia@diku.dk>
---
diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100
@@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru
if (sta_ht_inf) {
if ((!sta_ht_inf->ht_supported) ||
- (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))
+ (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)))
return 0;
}
^ permalink raw reply [flat|nested] 35+ messages in thread* [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-02-26 20:44 ` Julia Lawall 0 siblings, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-02-26 20:44 UTC (permalink / raw) To: yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors From: Julia Lawall <julia@diku.dk> In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed that involved converting !x & y to !(x & y). The code below shows the same pattern, and thus should perhaps be fixed in the same way. This is not tested and clearly changes the semantics, so it is only something to consider. The semantic patch that makes this change is as follows: (http://www.emn.fr/x-info/coccinelle/) // <smpl> @@ expression E1,E2; @@ ( !E1 & !E2 | - !E1 & E2 + !(E1 & E2) ) // </smpl> Signed-off-by: Julia Lawall <julia@diku.dk> --- diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c --- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100 +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100 @@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru if (sta_ht_inf) { if ((!sta_ht_inf->ht_supported) || - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) return 0; } ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & 2008-02-26 20:44 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Julia Lawall @ 2008-02-26 22:47 ` Tomas Winkler -1 siblings, 0 replies; 35+ messages in thread From: Tomas Winkler @ 2008-02-26 22:47 UTC (permalink / raw) To: Julia Lawall Cc: yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors On Tue, Feb 26, 2008 at 10:44 PM, Julia Lawall <julia@diku.dk> wrote: > From: Julia Lawall <julia@diku.dk> > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed that > involved converting !x & y to !(x & y). The code below shows the same > pattern, and thus should perhaps be fixed in the same way. > > This is not tested and clearly changes the semantics, so it is only > something to consider. > > The semantic patch that makes this change is as follows: > (http://www.emn.fr/x-info/coccinelle/) > > // <smpl> > @@ expression E1,E2; @@ > ( > !E1 & !E2 > | > - !E1 & E2 > + !(E1 & E2) > ) > // </smpl> > > Signed-off-by: Julia Lawall <julia@diku.dk> > > --- > > diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c > --- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100 > +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100 > @@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru > > if (sta_ht_inf) { > if ((!sta_ht_inf->ht_supported) || > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > return 0; > } The patch was already submitted by Roel Kluin '[PATCH] [wireless/iwlwifi/iwl-4965.c] add parentheses' I've acked it. Didn't track it if it's actually committed into tree... John, Reinette ? Thanks Tomas > - > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-02-26 22:47 ` Tomas Winkler 0 siblings, 0 replies; 35+ messages in thread From: Tomas Winkler @ 2008-02-26 22:47 UTC (permalink / raw) To: Julia Lawall Cc: yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors On Tue, Feb 26, 2008 at 10:44 PM, Julia Lawall <julia@diku.dk> wrote: > From: Julia Lawall <julia@diku.dk> > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed that > involved converting !x & y to !(x & y). The code below shows the same > pattern, and thus should perhaps be fixed in the same way. > > This is not tested and clearly changes the semantics, so it is only > something to consider. > > The semantic patch that makes this change is as follows: > (http://www.emn.fr/x-info/coccinelle/) > > // <smpl> > @@ expression E1,E2; @@ > ( > !E1 & !E2 > | > - !E1 & E2 > + !(E1 & E2) > ) > // </smpl> > > Signed-off-by: Julia Lawall <julia@diku.dk> > > --- > > diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c > --- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100 > +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100 > @@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru > > if (sta_ht_inf) { > if ((!sta_ht_inf->ht_supported) || > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > return 0; > } The patch was already submitted by Roel Kluin '[PATCH] [wireless/iwlwifi/iwl-4965.c] add parentheses' I've acked it. Didn't track it if it's actually committed into tree... John, Reinette ? Thanks Tomas > - > To unsubscribe from this list: send the line "unsubscribe linux-wireless" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct 2008-02-26 22:47 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Tomas Winkler @ 2008-02-27 0:59 ` John W. Linville -1 siblings, 0 replies; 35+ messages in thread From: John W. Linville @ 2008-02-27 0:59 UTC (permalink / raw) To: Tomas Winkler Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors On Wed, Feb 27, 2008 at 12:47:56AM +0200, Tomas Winkler wrote: > > diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c > > --- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100 > > +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100 > > @@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru > > > > if (sta_ht_inf) { > > if ((!sta_ht_inf->ht_supported) || > > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > > return 0; > > } > > The patch was already submitted by Roel Kluin '[PATCH] > [wireless/iwlwifi/iwl-4965.c] add parentheses' I've acked it. > Didn't track it if it's actually committed into tree... John, Reinette ? Already merged and sent to davem... Thanks, John -- John W. Linville linville@tuxdriver.com ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-02-27 0:59 ` John W. Linville 0 siblings, 0 replies; 35+ messages in thread From: John W. Linville @ 2008-02-27 0:59 UTC (permalink / raw) To: Tomas Winkler Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors On Wed, Feb 27, 2008 at 12:47:56AM +0200, Tomas Winkler wrote: > > diff -u -p a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c > > --- a/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-05 20:56:01.000000000 +0100 > > +++ b/drivers/net/wireless/iwlwifi/iwl-4965.c 2008-02-26 08:09:12.000000000 +0100 > > @@ -4589,7 +4589,7 @@ static u8 iwl4965_is_fat_tx_allowed(stru > > > > if (sta_ht_inf) { > > if ((!sta_ht_inf->ht_supported) || > > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > > return 0; > > } > > The patch was already submitted by Roel Kluin '[PATCH] > [wireless/iwlwifi/iwl-4965.c] add parentheses' I've acked it. > Didn't track it if it's actually committed into tree... John, Reinette ? Already merged and sent to davem... Thanks, John -- John W. Linville linville@tuxdriver.com ^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <Pine.LNX.4.64.0802262143570.18200-QfmoRoYWmW9knbxzx/v8hQ@public.gmane.org>]
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <Pine.LNX.4.64.0802262143570.18200-QfmoRoYWmW9knbxzx/v8hQ@public.gmane.org> 2008-03-05 6:38 ` Ingo Molnar @ 2008-03-05 6:38 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 6:38 UTC (permalink / raw) To: Julia Lawall Cc: yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett * Julia Lawall <julia@diku.dk> wrote: > From: Julia Lawall <julia@diku.dk> > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed > that involved converting !x & y to !(x & y). The code below shows the > same pattern, and thus should perhaps be fixed in the same way. > if (sta_ht_inf) { > if ((!sta_ht_inf->ht_supported) || > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > return 0; i'm wondering, could Sparse be extended to check for such patterns? People are regularly running "make C=1" and are sending fixes to make entire subsystems sparse-warning-free, so Sparse is a nice mechanism that works and it keeps code clean in the long run. I dont think the "!X & Y" pattern is ever used legitimately [and even if it were used legitimately, it's easy to avoid the sparse false positive - while in the buggy case we have a clear bug]. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 6:38 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 6:38 UTC (permalink / raw) To: Julia Lawall Cc: yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Julia Lawall <julia@diku.dk> wrote: > From: Julia Lawall <julia@diku.dk> > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed > that involved converting !x & y to !(x & y). The code below shows the > same pattern, and thus should perhaps be fixed in the same way. > if (sta_ht_inf) { > if ((!sta_ht_inf->ht_supported) || > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > return 0; i'm wondering, could Sparse be extended to check for such patterns? People are regularly running "make C=1" and are sending fixes to make entire subsystems sparse-warning-free, so Sparse is a nice mechanism that works and it keeps code clean in the long run. I dont think the "!X & Y" pattern is ever used legitimately [and even if it were used legitimately, it's easy to avoid the sparse false positive - while in the buggy case we have a clear bug]. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 6:38 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 6:38 UTC (permalink / raw) To: Julia Lawall Cc: yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett * Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org> wrote: > From: Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org> > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed > that involved converting !x & y to !(x & y). The code below shows the > same pattern, and thus should perhaps be fixed in the same way. > if (sta_ht_inf) { > if ((!sta_ht_inf->ht_supported) || > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > return 0; i'm wondering, could Sparse be extended to check for such patterns? People are regularly running "make C=1" and are sending fixes to make entire subsystems sparse-warning-free, so Sparse is a nice mechanism that works and it keeps code clean in the long run. I dont think the "!X & Y" pattern is ever used legitimately [and even if it were used legitimately, it's easy to avoid the sparse false positive - while in the buggy case we have a clear bug]. Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & 2008-03-05 6:38 ` Ingo Molnar @ 2008-03-05 6:49 ` Christopher Li -1 siblings, 0 replies; 35+ messages in thread From: Christopher Li @ 2008-03-05 6:49 UTC (permalink / raw) To: Ingo Molnar Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett I think Al Viro has sent a patch to linux-sparse with subject "[PATCH 3/3] catch !x & y brainos" does exactly that. Chris On Tue, Mar 4, 2008 at 10:38 PM, Ingo Molnar <mingo@elte.hu> wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > From: Julia Lawall <julia@diku.dk> > > > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed > > that involved converting !x & y to !(x & y). The code below shows the > > same pattern, and thus should perhaps be fixed in the same way. > > > > if (sta_ht_inf) { > > if ((!sta_ht_inf->ht_supported) || > > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > > return 0; > > i'm wondering, could Sparse be extended to check for such patterns? > > People are regularly running "make C=1" and are sending fixes to make > entire subsystems sparse-warning-free, so Sparse is a nice mechanism > that works and it keeps code clean in the long run. > > I dont think the "!X & Y" pattern is ever used legitimately [and even if > it were used legitimately, it's easy to avoid the sparse false positive > - while in the buggy case we have a clear bug]. > > Ingo > -- > To unsubscribe from this list: send the line "unsubscribe linux-sparse" in > > > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 6:49 ` Christopher Li 0 siblings, 0 replies; 35+ messages in thread From: Christopher Li @ 2008-03-05 6:49 UTC (permalink / raw) To: Ingo Molnar Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett I think Al Viro has sent a patch to linux-sparse with subject "[PATCH 3/3] catch !x & y brainos" does exactly that. Chris On Tue, Mar 4, 2008 at 10:38 PM, Ingo Molnar <mingo@elte.hu> wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > From: Julia Lawall <julia@diku.dk> > > > > In commit e6bafba5b4765a5a252f1b8d31cbf6d2459da337, a bug was fixed > > that involved converting !x & y to !(x & y). The code below shows the > > same pattern, and thus should perhaps be fixed in the same way. > > > > if (sta_ht_inf) { > > if ((!sta_ht_inf->ht_supported) || > > - (!sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH)) > > + (!(sta_ht_inf->cap & IEEE80211_HT_CAP_SUP_WIDTH))) > > return 0; > > i'm wondering, could Sparse be extended to check for such patterns? > > People are regularly running "make C=1" and are sending fixes to make > entire subsystems sparse-warning-free, so Sparse is a nice mechanism > that works and it keeps code clean in the long run. > > I dont think the "!X & Y" pattern is ever used legitimately [and even if > it were used legitimately, it's easy to avoid the sparse false positive > - while in the buggy case we have a clear bug]. > > Ingo > -- > To unsubscribe from this list: send the line "unsubscribe linux-sparse" in > > > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct 2008-03-05 6:49 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Christopher Li @ 2008-03-05 7:02 ` Ingo Molnar -1 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 7:02 UTC (permalink / raw) To: Christopher Li Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Christopher Li <sparse@chrisli.org> wrote: > I think Al Viro has sent a patch to linux-sparse with subject "[PATCH > 3/3] catch !x & y brainos" does exactly that. ah - nice :-) /me checks the linux-sparse archive Al's patch is: + if (op = '&' && expr->left->type = EXPR_PREOP && + expr->left->op = '!') + warning(expr->pos, "dubious: !x & y"); i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 7:02 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 7:02 UTC (permalink / raw) To: Christopher Li Cc: Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Christopher Li <sparse@chrisli.org> wrote: > I think Al Viro has sent a patch to linux-sparse with subject "[PATCH > 3/3] catch !x & y brainos" does exactly that. ah - nice :-) /me checks the linux-sparse archive Al's patch is: + if (op == '&' && expr->left->type == EXPR_PREOP && + expr->left->op == '!') + warning(expr->pos, "dubious: !x & y"); i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <20080305070201.GA32434-X9Un+BFzKDI@public.gmane.org>]
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <20080305070201.GA32434-X9Un+BFzKDI@public.gmane.org> 2008-03-05 7:09 ` Harvey Harrison @ 2008-03-05 7:09 ` Harvey Harrison 1 sibling, 0 replies; 35+ messages in thread From: Harvey Harrison @ 2008-03-05 7:09 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, Julia Lawall, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, 2008-03-05 at 08:02 +0100, Ingo Molnar wrote: > * Christopher Li <sparse@chrisli.org> wrote: > > > I think Al Viro has sent a patch to linux-sparse with subject "[PATCH > > 3/3] catch !x & y brainos" does exactly that. > > ah - nice :-) > > /me checks the linux-sparse archive > > Al's patch is: > > + if (op = '&' && expr->left->type = EXPR_PREOP && > + expr->left->op = '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > Well, (!x & y) and (!x | y) are probably the two that might have been intended otherwise. (x & !y), (x | !y) are probably ok. Harvey ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 7:09 ` Harvey Harrison 0 siblings, 0 replies; 35+ messages in thread From: Harvey Harrison @ 2008-03-05 7:09 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Alexander Viro, linux-sparse, Josh Triplett On Wed, 2008-03-05 at 08:02 +0100, Ingo Molnar wrote: > * Christopher Li <sparse@chrisli.org> wrote: > > > I think Al Viro has sent a patch to linux-sparse with subject "[PATCH > > 3/3] catch !x & y brainos" does exactly that. > > ah - nice :-) > > /me checks the linux-sparse archive > > Al's patch is: > > + if (op == '&' && expr->left->type == EXPR_PREOP && > + expr->left->op == '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > Well, (!x & y) and (!x | y) are probably the two that might have been intended otherwise. (x & !y), (x | !y) are probably ok. Harvey ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 7:09 ` Harvey Harrison 0 siblings, 0 replies; 35+ messages in thread From: Harvey Harrison @ 2008-03-05 7:09 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, Julia Lawall, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, 2008-03-05 at 08:02 +0100, Ingo Molnar wrote: > * Christopher Li <sparse-55XgFHCVCFZAfugRpC6u6w@public.gmane.org> wrote: > > > I think Al Viro has sent a patch to linux-sparse with subject "[PATCH > > 3/3] catch !x & y brainos" does exactly that. > > ah - nice :-) > > /me checks the linux-sparse archive > > Al's patch is: > > + if (op == '&' && expr->left->type == EXPR_PREOP && > + expr->left->op == '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > Well, (!x & y) and (!x | y) are probably the two that might have been intended otherwise. (x & !y), (x | !y) are probably ok. Harvey -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct 2008-03-05 7:09 ` Harvey Harrison @ 2008-03-05 8:19 ` Ingo Molnar -1 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 8:19 UTC (permalink / raw) To: Harvey Harrison Cc: Christopher Li, Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Alexander Viro, linux-sparse, Josh Triplett * Harvey Harrison <harvey.harrison@gmail.com> wrote: > > Al's patch is: > > > > + if (op = '&' && expr->left->type = EXPR_PREOP && > > + expr->left->op = '!') > > + warning(expr->pos, "dubious: !x & y"); > > > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > > > > Well, (!x & y) and (!x | y) are probably the two that might have been > intended otherwise. (x & !y), (x | !y) are probably ok. i think the proper intention in the latter cases is (x & ~y) and (x | ~y). My strong bet is that in 99% of the cases they are real bugs and && or || was intended. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 8:19 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 8:19 UTC (permalink / raw) To: Harvey Harrison Cc: Christopher Li, Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Alexander Viro, linux-sparse, Josh Triplett * Harvey Harrison <harvey.harrison@gmail.com> wrote: > > Al's patch is: > > > > + if (op == '&' && expr->left->type == EXPR_PREOP && > > + expr->left->op == '!') > > + warning(expr->pos, "dubious: !x & y"); > > > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > > > > Well, (!x & y) and (!x | y) are probably the two that might have been > intended otherwise. (x & !y), (x | !y) are probably ok. i think the proper intention in the latter cases is (x & ~y) and (x | ~y). My strong bet is that in 99% of the cases they are real bugs and && or || was intended. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <20080305081904.GA17789-X9Un+BFzKDI@public.gmane.org>]
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <20080305081904.GA17789-X9Un+BFzKDI@public.gmane.org> 2008-03-05 12:13 ` Derek M Jones @ 2008-03-05 12:13 ` Derek M Jones 0 siblings, 0 replies; 35+ messages in thread From: Derek M Jones @ 2008-03-05 12:13 UTC (permalink / raw) To: Ingo Molnar Cc: Harvey Harrison, Christopher Li, Julia Lawall, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett All, >>> i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? >>> >> Well, (!x & y) and (!x | y) are probably the two that might have been >> intended otherwise. (x & !y), (x | !y) are probably ok. > > i think the proper intention in the latter cases is (x & ~y) and > (x | ~y). > > My strong bet is that in 99% of the cases they are real bugs and && or > || was intended. Developer knowledge of operator precedence and the issue of what they intended to write are interesting topics. Some experimental work is described in (binary operators only I'm afraid): www.knosof.co.uk/cbook/accu06a.pdf www.knosof.co.uk/cbook/accu07a.pdf The ACCU 2006 experiment provides evidence that developer knowledge is proportional to the number of occurrences of a construct in source code, it also shows a stunningly high percentage of incorrect answers. The ACCU 2007 experiment provides evidence that the names of the operands has a significant impact on operator precedence choice. I wonder what kind of names are used as the operand of unary operators? I would expect the ~ operator to have a bitwise name, but the ! operator might have an arithmetic or bitwise name. -- Derek M. Jones tel: +44 (0) 1252 520 667 Knowledge Software Ltd mailto:derek@knosof.co.uk Applications Standards Conformance Testing http://www.knosof.co.uk ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:13 ` Derek M Jones 0 siblings, 0 replies; 35+ messages in thread From: Derek M Jones @ 2008-03-05 12:13 UTC (permalink / raw) To: Ingo Molnar Cc: Harvey Harrison, Christopher Li, Julia Lawall, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Alexander Viro, linux-sparse, Josh Triplett All, >>> i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? >>> >> Well, (!x & y) and (!x | y) are probably the two that might have been >> intended otherwise. (x & !y), (x | !y) are probably ok. > > i think the proper intention in the latter cases is (x & ~y) and > (x | ~y). > > My strong bet is that in 99% of the cases they are real bugs and && or > || was intended. Developer knowledge of operator precedence and the issue of what they intended to write are interesting topics. Some experimental work is described in (binary operators only I'm afraid): www.knosof.co.uk/cbook/accu06a.pdf www.knosof.co.uk/cbook/accu07a.pdf The ACCU 2006 experiment provides evidence that developer knowledge is proportional to the number of occurrences of a construct in source code, it also shows a stunningly high percentage of incorrect answers. The ACCU 2007 experiment provides evidence that the names of the operands has a significant impact on operator precedence choice. I wonder what kind of names are used as the operand of unary operators? I would expect the ~ operator to have a bitwise name, but the ! operator might have an arithmetic or bitwise name. -- Derek M. Jones tel: +44 (0) 1252 520 667 Knowledge Software Ltd mailto:derek@knosof.co.uk Applications Standards Conformance Testing http://www.knosof.co.uk ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:13 ` Derek M Jones 0 siblings, 0 replies; 35+ messages in thread From: Derek M Jones @ 2008-03-05 12:13 UTC (permalink / raw) To: Ingo Molnar Cc: Harvey Harrison, Christopher Li, Julia Lawall, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett All, >>> i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? >>> >> Well, (!x & y) and (!x | y) are probably the two that might have been >> intended otherwise. (x & !y), (x | !y) are probably ok. > > i think the proper intention in the latter cases is (x & ~y) and > (x | ~y). > > My strong bet is that in 99% of the cases they are real bugs and && or > || was intended. Developer knowledge of operator precedence and the issue of what they intended to write are interesting topics. Some experimental work is described in (binary operators only I'm afraid): www.knosof.co.uk/cbook/accu06a.pdf www.knosof.co.uk/cbook/accu07a.pdf The ACCU 2006 experiment provides evidence that developer knowledge is proportional to the number of occurrences of a construct in source code, it also shows a stunningly high percentage of incorrect answers. The ACCU 2007 experiment provides evidence that the names of the operands has a significant impact on operator precedence choice. I wonder what kind of names are used as the operand of unary operators? I would expect the ~ operator to have a bitwise name, but the ! operator might have an arithmetic or bitwise name. -- Derek M. Jones tel: +44 (0) 1252 520 667 Knowledge Software Ltd mailto:derek-Qjv84pu2YCLQXOPxS62xeg@public.gmane.org Applications Standards Conformance Testing http://www.knosof.co.uk -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <20080305070201.GA32434-X9Un+BFzKDI@public.gmane.org> 2008-03-05 7:09 ` Harvey Harrison @ 2008-03-05 8:55 ` Julia Lawall 1 sibling, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 8:55 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett There are some legitimate uses of !x & y which are actually of the form !x & !y, where x and y are function calls. That is a not particularly elegant way of getting both x and y to be evaluated and then combining the results using "and". If such code is considered acceptable, then perhaps the sparse patch should be more complicated. julia > Al's patch is: > > + if (op = '&' && expr->left->type = EXPR_PREOP && > + expr->left->op = '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > > Ingo > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 8:55 ` Julia Lawall 0 siblings, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 8:55 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett There are some legitimate uses of !x & y which are actually of the form !x & !y, where x and y are function calls. That is a not particularly elegant way of getting both x and y to be evaluated and then combining the results using "and". If such code is considered acceptable, then perhaps the sparse patch should be more complicated. julia > Al's patch is: > > + if (op == '&' && expr->left->type == EXPR_PREOP && > + expr->left->op == '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > > Ingo > ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 8:55 ` Julia Lawall 0 siblings, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 8:55 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett There are some legitimate uses of !x & y which are actually of the form !x & !y, where x and y are function calls. That is a not particularly elegant way of getting both x and y to be evaluated and then combining the results using "and". If such code is considered acceptable, then perhaps the sparse patch should be more complicated. julia > Al's patch is: > > + if (op == '&' && expr->left->type == EXPR_PREOP && > + expr->left->op == '!') > + warning(expr->pos, "dubious: !x & y"); > > i think there might be similar patterns: "x & !y", "!x | y", "x | !y" ? > > Ingo > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct 2008-03-05 8:55 ` Julia Lawall @ 2008-03-05 12:20 ` Ingo Molnar -1 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 12:20 UTC (permalink / raw) To: Julia Lawall Cc: Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Julia Lawall <julia@diku.dk> wrote: > There are some legitimate uses of !x & y which are actually of the > form !x & !y, where x and y are function calls. That is a not > particularly elegant way of getting both x and y to be evaluated and > then combining the results using "and". If such code is considered > acceptable, then perhaps the sparse patch should be more complicated. i tend to be of the opinion that the details in C source code should be visually obvious and should be heavily simplified down from what is 'possible' language-wise - with most deviations and complications that depart from convention considered an error. I'd consider "!fn1() & !fn2()" a borderline coding style violation in any case - and it costs nothing to change it to "!fn1() && !fn2()". Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:20 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 12:20 UTC (permalink / raw) To: Julia Lawall Cc: Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Julia Lawall <julia@diku.dk> wrote: > There are some legitimate uses of !x & y which are actually of the > form !x & !y, where x and y are function calls. That is a not > particularly elegant way of getting both x and y to be evaluated and > then combining the results using "and". If such code is considered > acceptable, then perhaps the sparse patch should be more complicated. i tend to be of the opinion that the details in C source code should be visually obvious and should be heavily simplified down from what is 'possible' language-wise - with most deviations and complications that depart from convention considered an error. I'd consider "!fn1() & !fn2()" a borderline coding style violation in any case - and it costs nothing to change it to "!fn1() && !fn2()". Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <20080305122010.GA999-X9Un+BFzKDI@public.gmane.org>]
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & [not found] ` <20080305122010.GA999-X9Un+BFzKDI@public.gmane.org> 2008-03-05 12:30 ` Bart Van Assche @ 2008-03-05 12:30 ` Bart Van Assche 1 sibling, 0 replies; 35+ messages in thread From: Bart Van Assche @ 2008-03-05 12:30 UTC (permalink / raw) To: Ingo Molnar Cc: Julia Lawall, Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, Mar 5, 2008 at 1:20 PM, Ingo Molnar <mingo@elte.hu> wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". If someone writes (!x & !y) instead of (!x && !y) because both x and y have to be evaluated, this means that both x and y have side effects. Please keep in mind that the C language does not specify whether x or y has to be evaluated first, so if x and y have to be evaluated in that order, an expression like (!x & !y) can be the cause of very subtle bugs. I prefer readability above brevity. Bart Van Assche. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:30 ` Bart Van Assche 0 siblings, 0 replies; 35+ messages in thread From: Bart Van Assche @ 2008-03-05 12:30 UTC (permalink / raw) To: Ingo Molnar Cc: Julia Lawall, Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett On Wed, Mar 5, 2008 at 1:20 PM, Ingo Molnar <mingo@elte.hu> wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". If someone writes (!x & !y) instead of (!x && !y) because both x and y have to be evaluated, this means that both x and y have side effects. Please keep in mind that the C language does not specify whether x or y has to be evaluated first, so if x and y have to be evaluated in that order, an expression like (!x & !y) can be the cause of very subtle bugs. I prefer readability above brevity. Bart Van Assche. ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:30 ` Bart Van Assche 0 siblings, 0 replies; 35+ messages in thread From: Bart Van Assche @ 2008-03-05 12:30 UTC (permalink / raw) To: Ingo Molnar Cc: Julia Lawall, Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, Mar 5, 2008 at 1:20 PM, Ingo Molnar <mingo-X9Un+BFzKDI@public.gmane.org> wrote: > > * Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". If someone writes (!x & !y) instead of (!x && !y) because both x and y have to be evaluated, this means that both x and y have side effects. Please keep in mind that the C language does not specify whether x or y has to be evaluated first, so if x and y have to be evaluated in that order, an expression like (!x & !y) can be the cause of very subtle bugs. I prefer readability above brevity. Bart Van Assche. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
[parent not found: <e2e108260803050430o317d3e0dyed50e86cc4569746-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>]
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <e2e108260803050430o317d3e0dyed50e86cc4569746-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2008-03-05 12:36 ` Ingo Molnar @ 2008-03-05 12:36 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 12:36 UTC (permalink / raw) To: Bart Van Assche Cc: Julia Lawall, Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett * Bart Van Assche <bart.vanassche@gmail.com> wrote: > If someone writes (!x & !y) instead of (!x && !y) because both x and y > have to be evaluated, this means that both x and y have side effects. > Please keep in mind that the C language does not specify whether x or > y has to be evaluated first, so if x and y have to be evaluated in > that order, an expression like (!x & !y) can be the cause of very > subtle bugs. I prefer readability above brevity. such expressions _must_ be written as: ret1 = x(); ret2 = y(); if (ret1 && ret2) ... any side-effects are totally un-obvious when they are in expressions and someone doing cleanups later on could easily change the '&' to '&&' and introduce a bug. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:36 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 12:36 UTC (permalink / raw) To: Bart Van Assche Cc: Julia Lawall, Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett * Bart Van Assche <bart.vanassche@gmail.com> wrote: > If someone writes (!x & !y) instead of (!x && !y) because both x and y > have to be evaluated, this means that both x and y have side effects. > Please keep in mind that the C language does not specify whether x or > y has to be evaluated first, so if x and y have to be evaluated in > that order, an expression like (!x & !y) can be the cause of very > subtle bugs. I prefer readability above brevity. such expressions _must_ be written as: ret1 = x(); ret2 = y(); if (ret1 && ret2) ... any side-effects are totally un-obvious when they are in expressions and someone doing cleanups later on could easily change the '&' to '&&' and introduce a bug. Ingo ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:36 ` Ingo Molnar 0 siblings, 0 replies; 35+ messages in thread From: Ingo Molnar @ 2008-03-05 12:36 UTC (permalink / raw) To: Bart Van Assche Cc: Julia Lawall, Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett * Bart Van Assche <bart.vanassche-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > If someone writes (!x & !y) instead of (!x && !y) because both x and y > have to be evaluated, this means that both x and y have side effects. > Please keep in mind that the C language does not specify whether x or > y has to be evaluated first, so if x and y have to be evaluated in > that order, an expression like (!x & !y) can be the cause of very > subtle bugs. I prefer readability above brevity. such expressions _must_ be written as: ret1 = x(); ret2 = y(); if (ret1 && ret2) ... any side-effects are totally un-obvious when they are in expressions and someone doing cleanups later on could easily change the '&' to '&&' and introduce a bug. Ingo -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct [not found] ` <20080305122010.GA999-X9Un+BFzKDI@public.gmane.org> 2008-03-05 12:30 ` Bart Van Assche @ 2008-03-05 12:35 ` Julia Lawall 1 sibling, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 12:35 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, 5 Mar 2008, Ingo Molnar wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". !fn1() && !fn2() does not have the same semantics as !fn1() & !fn2(). In !fn1() & !fn2() both function calls are evaluated. In !fn1() && !fn2(), if !fn1() returns false then !fn2() is not evaluated. I haven't studied the particular instances of fn2(), though, to know whether it makes a difference. One could instead do something like: x = fn1(); y = fn2(); if (!x && !y) ... It would certainly be clearer, but more verbose. julia ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:35 ` Julia Lawall 0 siblings, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 12:35 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu, linux-wireless, ipw3945-devel, linux-kernel, kernel-janitors, Harvey Harrison, Alexander Viro, linux-sparse, Josh Triplett On Wed, 5 Mar 2008, Ingo Molnar wrote: > > * Julia Lawall <julia@diku.dk> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". !fn1() && !fn2() does not have the same semantics as !fn1() & !fn2(). In !fn1() & !fn2() both function calls are evaluated. In !fn1() && !fn2(), if !fn1() returns false then !fn2() is not evaluated. I haven't studied the particular instances of fn2(), though, to know whether it makes a difference. One could instead do something like: x = fn1(); y = fn2(); if (!x && !y) ... It would certainly be clearer, but more verbose. julia ^ permalink raw reply [flat|nested] 35+ messages in thread
* Re: [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & @ 2008-03-05 12:35 ` Julia Lawall 0 siblings, 0 replies; 35+ messages in thread From: Julia Lawall @ 2008-03-05 12:35 UTC (permalink / raw) To: Ingo Molnar Cc: Christopher Li, yi.zhu-ral2JQCrhuEAvxtiuMwx3w, linux-wireless-u79uwXL29TY76Z2rM5mHXA, ipw3945-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f, linux-kernel-u79uwXL29TY76Z2rM5mHXA, kernel-janitors-u79uwXL29TY76Z2rM5mHXA, Harvey Harrison, Alexander Viro, linux-sparse-u79uwXL29TY76Z2rM5mHXA, Josh Triplett On Wed, 5 Mar 2008, Ingo Molnar wrote: > > * Julia Lawall <julia-dAYI7NvHqcQ@public.gmane.org> wrote: > > > There are some legitimate uses of !x & y which are actually of the > > form !x & !y, where x and y are function calls. That is a not > > particularly elegant way of getting both x and y to be evaluated and > > then combining the results using "and". If such code is considered > > acceptable, then perhaps the sparse patch should be more complicated. > > i tend to be of the opinion that the details in C source code should be > visually obvious and should be heavily simplified down from what is > 'possible' language-wise - with most deviations and complications that > depart from convention considered an error. I'd consider "!fn1() & > !fn2()" a borderline coding style violation in any case - and it costs > nothing to change it to "!fn1() && !fn2()". !fn1() && !fn2() does not have the same semantics as !fn1() & !fn2(). In !fn1() & !fn2() both function calls are evaluated. In !fn1() && !fn2(), if !fn1() returns false then !fn2() is not evaluated. I haven't studied the particular instances of fn2(), though, to know whether it makes a difference. One could instead do something like: x = fn1(); y = fn2(); if (!x && !y) ... It would certainly be clearer, but more verbose. julia -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 35+ messages in thread
end of thread, other threads:[~2008-03-05 12:37 UTC | newest]
Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-26 20:44 [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of Julia Lawall
2008-02-26 20:44 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Julia Lawall
2008-02-26 22:47 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & Tomas Winkler
2008-02-26 22:47 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Tomas Winkler
2008-02-27 0:59 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct John W. Linville
2008-02-27 0:59 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & John W. Linville
[not found] ` <Pine.LNX.4.64.0802262143570.18200-QfmoRoYWmW9knbxzx/v8hQ@public.gmane.org>
2008-03-05 6:38 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Ingo Molnar
2008-03-05 6:38 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Ingo Molnar
2008-03-05 6:38 ` Ingo Molnar
2008-03-05 6:49 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & Christopher Li
2008-03-05 6:49 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Christopher Li
2008-03-05 7:02 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Ingo Molnar
2008-03-05 7:02 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Ingo Molnar
[not found] ` <20080305070201.GA32434-X9Un+BFzKDI@public.gmane.org>
2008-03-05 7:09 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Harvey Harrison
2008-03-05 7:09 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Harvey Harrison
2008-03-05 7:09 ` Harvey Harrison
2008-03-05 8:19 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Ingo Molnar
2008-03-05 8:19 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Ingo Molnar
[not found] ` <20080305081904.GA17789-X9Un+BFzKDI@public.gmane.org>
2008-03-05 12:13 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Derek M Jones
2008-03-05 12:13 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Derek M Jones
2008-03-05 12:13 ` Derek M Jones
2008-03-05 8:55 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Julia Lawall
2008-03-05 8:55 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Julia Lawall
2008-03-05 8:55 ` Julia Lawall
2008-03-05 12:20 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Ingo Molnar
2008-03-05 12:20 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Ingo Molnar
[not found] ` <20080305122010.GA999-X9Un+BFzKDI@public.gmane.org>
2008-03-05 12:30 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of.and & Bart Van Assche
2008-03-05 12:30 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Bart Van Assche
2008-03-05 12:30 ` Bart Van Assche
[not found] ` <e2e108260803050430o317d3e0dyed50e86cc4569746-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2008-03-05 12:36 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Ingo Molnar
2008-03-05 12:36 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Ingo Molnar
2008-03-05 12:36 ` Ingo Molnar
2008-03-05 12:35 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct Julia Lawall
2008-03-05 12:35 ` [PATCH 6/9] drivers/net/wireless/iwlwifi/iwl-4965.c: Correct use of ! and & Julia Lawall
2008-03-05 12:35 ` Julia Lawall
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.