From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753533AbcHAMdJ (ORCPT ); Mon, 1 Aug 2016 08:33:09 -0400 Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83]:56841 "EHLO mail2-relais-roc.national.inria.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752342AbcHAMc6 (ORCPT ); Mon, 1 Aug 2016 08:32:58 -0400 X-IronPort-AV: E=Sophos;i="5.28,455,1464645600"; d="scan'208";a="228637249" Date: Mon, 1 Aug 2016 14:32:46 +0200 (CEST) From: Julia Lawall X-X-Sender: jll@hadrien To: SF Markus Elfring cc: Amitoj Kaur Chawla , LKML , Coccinelle , Gilles Muller , Michal Marek , Nicolas Palix Subject: Re: [Cocci] [PATCH v3] Coccinelle: Script to replace allocate and memset with zalloc functions In-Reply-To: Message-ID: References: <20160801070233.GA19102@amitoj-Inspiron-3542> <0dbd2dd6-4c68-1f7c-1500-9e5d40047813@users.sourceforge.net> User-Agent: Alpine 2.10 (DEB 1266 2009-07-14) MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Mon, 1 Aug 2016, SF Markus Elfring wrote: > >> How do you think about the following SmPL script example? > >> > >> @vz_combined > >> depends on patch && !context && !org && !report@ > >> type T; > >> T* pointer; > >> +statement S; > >> expression express; > >> @@ > >> pointer = > >> - vmalloc > >> + vzalloc > >> (...); > >> if (!d) > >> S > >> -memset(d, 0, sizeof( > >> ( > >> -T > >> | > >> -*(express) > >> ) > >> -)); Actually, this is a mess. pointer, d, and express are all supposed to be the same thing, as they were in the original rule. Furthermore, this shows a reason why the original rule was better. If you say T *pointer, then you require that Coccinelle can find the type sofficiently to know that it is a pointer. There was no such constraint in the sizeof(*d) variant of the original rule. > > The performance issue is that disjunctions on expressions, eg (A | B), are > > implemented as (A | (!A & B)), ie with a negation of all the previous > > options &d with each option. So it is better to avoid very large > > disjunctions on expressions. > > Is the suggested SmPL disjunction still small enough for this concern? 2 elements is OK. julia From mboxrd@z Thu Jan 1 00:00:00 1970 From: julia.lawall@lip6.fr (Julia Lawall) Date: Mon, 1 Aug 2016 14:32:46 +0200 (CEST) Subject: [Cocci] [PATCH v3] Coccinelle: Script to replace allocate and memset with zalloc functions In-Reply-To: References: <20160801070233.GA19102@amitoj-Inspiron-3542> <0dbd2dd6-4c68-1f7c-1500-9e5d40047813@users.sourceforge.net> Message-ID: To: cocci@systeme.lip6.fr List-Id: cocci@systeme.lip6.fr On Mon, 1 Aug 2016, SF Markus Elfring wrote: > >> How do you think about the following SmPL script example? > >> > >> @vz_combined > >> depends on patch && !context && !org && !report@ > >> type T; > >> T* pointer; > >> +statement S; > >> expression express; > >> @@ > >> pointer = > >> - vmalloc > >> + vzalloc > >> (...); > >> if (!d) > >> S > >> -memset(d, 0, sizeof( > >> ( > >> -T > >> | > >> -*(express) > >> ) > >> -)); Actually, this is a mess. pointer, d, and express are all supposed to be the same thing, as they were in the original rule. Furthermore, this shows a reason why the original rule was better. If you say T *pointer, then you require that Coccinelle can find the type sofficiently to know that it is a pointer. There was no such constraint in the sizeof(*d) variant of the original rule. > > The performance issue is that disjunctions on expressions, eg (A | B), are > > implemented as (A | (!A & B)), ie with a negation of all the previous > > options &d with each option. So it is better to avoid very large > > disjunctions on expressions. > > Is the suggested SmPL disjunction still small enough for this concern? 2 elements is OK. julia