Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp480842pxb; Sat, 6 Mar 2021 06:10:35 -0800 (PST) X-Google-Smtp-Source: ABdhPJxOTibAypgK/nJu8U2TYc/2KY2u6BkSyd8+RGh5X7AxPbKQmlPnaWM2EmqspNCfjfnQYgvF X-Received: by 2002:aa7:da0f:: with SMTP id r15mr13786980eds.111.1615039835139; Sat, 06 Mar 2021 06:10:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615039835; cv=none; d=google.com; s=arc-20160816; b=G0ij86iNkCXAaL+Robgm3h+sfwxd7X7iOj3rAHY65K1kkLQY33Hbi0ASJEZOa9ZHwx 0wTVWkMgJZ2TWOM56ppL/VKHqyQO5C0k3yQqC4fV8vEbZpzHpYXiJYRitK5vA47i3m8E CkSYKkOnLTT1vzdMMhUqBZLA/YQfmb5g8XmkeK1UP8v70dGTovPTro0GlizNJzu4d0Ag ZQWz5K+ivwuKKOgiK6B14XfKXyPrk/KI3OYGfwtzvFRf3fdt9JgXmaFytdMFfWRtF/Bl G7wOJRbYikD5Hw3Tac3cOvopkDA2LmHodXshG5lSR4QsrLY+6XD5BiZd3A/ENC3DljtT +I1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:user-agent:references:message-id :in-reply-to:subject:cc:to:from:date; bh=xXlP3T2dkKH2vRESyfw0unzjfQcpecDDw/HipC7YCtU=; b=fp24sN5ZnhbXGho6yczoQV4v0euU0zkhqZIIYdShfHOjYgqvw6aVKDCYezn5lh4Nwd TGgAbSuuVFsLNRkeXjtJH8HLT2XTAPictS50SSYdA904+F9UZCwwz08T5mm+T4kNc5Im 5PyYN3AtijkXzjVrLKfYZvoeRDrL5m7fmNefAFEo33SHHSwBb6XD9e/unhaw3wU8rt3f wK54Yxw3wPJXAY2xdNK2QRFdUCtlF/MKenM2elnx6B97RniI0zHERoJQIM3FCOyv4jKP lCFDzf7ziJ9smhAjs3+Ew+YsvCokmZyVRky1k6PtTMDxzXW7Dw0tlzXlEUTB0jXUPfyP PiTw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a17si3301936edn.146.2021.03.06.06.10.12; Sat, 06 Mar 2021 06:10:35 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230249AbhCFOJC (ORCPT + 99 others); Sat, 6 Mar 2021 09:09:02 -0500 Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83]:16188 "EHLO mail2-relais-roc.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230507AbhCFOI5 (ORCPT ); Sat, 6 Mar 2021 09:08:57 -0500 X-IronPort-AV: E=Sophos;i="5.81,228,1610406000"; d="scan'208";a="496489458" Received: from 173.121.68.85.rev.sfr.net (HELO hadrien) ([85.68.121.173]) by mail2-relais-roc.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 06 Mar 2021 15:08:56 +0100 Date: Sat, 6 Mar 2021 15:08:56 +0100 (CET) From: Julia Lawall X-X-Sender: jll@hadrien To: Denis Efremov cc: cocci@systeme.lip6.fr, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2 RESEND] coccinelle: misc: add minmax script In-Reply-To: <20210219090655.8985-1-efremov@linux.com> Message-ID: References: <20210216160326.1341741-1-efremov@linux.com> <20210219090655.8985-1-efremov@linux.com> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 19 Feb 2021, Denis Efremov wrote: > Check for opencoded min(), max() implementations. > > Signed-off-by: Denis Efremov > --- > > Changes in v2: > - <... ...> instead of ... when any > - org mode reports fixed > - patch rule to drop excessive () > > scripts/coccinelle/misc/minmax.cocci | 224 +++++++++++++++++++++++++++ > 1 file changed, 224 insertions(+) > create mode 100644 scripts/coccinelle/misc/minmax.cocci > > diff --git a/scripts/coccinelle/misc/minmax.cocci b/scripts/coccinelle/misc/minmax.cocci > new file mode 100644 > index 000000000000..61d6b61fd82c > --- /dev/null > +++ b/scripts/coccinelle/misc/minmax.cocci > @@ -0,0 +1,224 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/// > +/// Check for opencoded min(), max() implementations. > +/// Generated patches sometimes require adding a cast to fix compile warning. > +/// Warnings/patches scope intentionally limited to a function body. > +/// > +// Confidence: Medium > +// Copyright: (C) 2021 Denis Efremov ISPRAS > +// Options: --no-includes --include-headers > +// > +// Keywords: min, max > +// > + > + > +virtual report > +virtual org > +virtual context > +virtual patch > + > +@rmax depends on !patch@ > +identifier func; > +expression x, y; > +binary operator cmp = {>, >=}; > +position p; > +@@ > + > +func(...) > +{ > + <... > +* x cmp@p y ? x : y The rule below indicated with FIXME is supposed to deal with the possibility of () that are unnecessary when using min and max. It doesn't work, because <... P ...> allow P to match 0 or more times, and thus func@p matches every function. A simpler solution is to just allow arbitrary () in the pattern, eg: (x) cmp@p (y) ? (x) : (y) That will allow each occurrence of x and y to occur with and without parentheses. In the submitted semantic patch, the () issue was only considered in the patch case. But it actually affects the purely matching cases too, because () can be used at one occurrence, but not the other. > +@script:python depends on report@ > +p << rmax.p; > +@@ > + > +coccilib.report.print_report(p[0], "WARNING opportunity for max()") p is an array because it can be bound to different positions on different control-flow paths. Notably this occurs with <... ...>. If there are multiple occurrences of the pattern, there will be one match that contains all of them. Thus the reporting code should be: for p0 in p: coccilib.report.print_report(p0, "WARNING opportunity for max()") julia