From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752741AbbIPNWz (ORCPT ); Wed, 16 Sep 2015 09:22:55 -0400 Received: from mailout3.w1.samsung.com ([210.118.77.13]:47802 "EHLO mailout3.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751734AbbIPNWx (ORCPT ); Wed, 16 Sep 2015 09:22:53 -0400 X-AuditID: cbfec7f4-f79c56d0000012ee-43-55f96d2bbca4 From: Andrzej Hajda To: julia.lawall@lip6.fr Cc: Andrzej Hajda , Gilles.Muller@lip6.fr, nicolas.palix@imag.fr, mmarek@suse.com, cocci@systeme.lip6.fr, joe@perches.com, linux-kernel@vger.kernel.org, b.zolnierkie@samsung.com Subject: [PATCH v2] coccinelle: tests: unsigned value cannot be lesser than zero Date: Wed, 16 Sep 2015 15:22:29 +0200 Message-id: <1442409749-32700-1-git-send-email-a.hajda@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: References: X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrBLMWRmVeSWpSXmKPExsVy+t/xa7rauT9DDTbPULS4te4cq8XGGetZ LX5sWs1mMfvnJSaL2fcfs1gse3Ca0eLyrjlsFnNaZ7FZHHu5nMmB0+PYsVZmj71bsjy+rLrG 7NG3ZRWjx/otV1k8Hi27z+LxeZNcAHsUl01Kak5mWWqRvl0CV8aV35uZC/byV9x6OpWlgfE5 TxcjJ4eEgInElKuNzBC2mMSFe+vZuhi5OIQEljJK7Pq4mBnCaWKSWP3kIDtIFZuApsTfzTfZ QGwRAQmJp1fmgnUwC5xilGhcOJsJJCEsECDRNGUT2FgWAVWJlWeOsILYvALOEn1TtzNBrJOT OHlsMlicU8BS4mTbO7B6IQELiaZlV1gnMPIuYGRYxSiaWppcUJyUnmuoV5yYW1yal66XnJ+7 iRESfl92MC4+ZnWIUYCDUYmH1+Hlj1Ah1sSy4srcQ4wSHMxKIryPrH6GCvGmJFZWpRblxxeV 5qQWH2KU5mBREuedu+t9iJBAemJJanZqakFqEUyWiYNTqoFx3bIdG3Odjmfk7rjZ3SnQ4hB3 4l7052TTiWVnX37NYgjjPVLE2LY+fMLTbvZHft2id09KfLB+N0vl9Kvlb71lbFdNu7Gp/kZy mruytJeES9Ja3aAjlSGcB/menF1WWfJ4krB5l9r0t7JaAQaWJeYOrzrEnf+sdormUw0Xd7cS Dt2spe6mMkOJpTgj0VCLuag4EQCEm06kOwIAAA== Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Code comparing unsigned variables with zero using operators < or >= does not make sense. It is always false or true, respectively. However, its presence often indicates bugs in the code. gcc can detect it also using -Wtype-limits switch, but it warns also in correct cases, making too much noise. Signed-off-by: Andrzej Hajda --- v2: added --all-includes option As we discussed earlier I have dropped idea of adding v <= 0 as it is widely used in checking ranges, counters, quantities. Regards Andrzej --- .../tests/unsigned_lesser_than_zero.cocci | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci diff --git a/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci new file mode 100644 index 0000000..eab6d8c --- /dev/null +++ b/scripts/coccinelle/tests/unsigned_lesser_than_zero.cocci @@ -0,0 +1,37 @@ +/// Unsigned variables cannot be lesser than zero. Presence of such checks +/// can indicate incorrect variable type or just unnecessary code. +/// +// Confidence: High +// Copyright: (C) 2015 Andrzej Hajda, Samsung Electronics Co., Ltd. GPLv2. +// URL: http://coccinelle.lip6.fr/ +// Options: --include-headers --all-includes + +virtual context +virtual org +virtual report + +@r depends on context || org || report@ +position p; +typedef u8, u16, u32, u64; +{unsigned char, unsigned short int, unsigned int, unsigned long, unsigned long long, size_t, u8, u16, u32, u64} v; +@@ + +( +*v@p < 0 +| +*v@p >= 0 +) + +@script:python depends on org@ +p << r.p; +@@ + +msg = "WARNING: Unsigned value cannot be lesser than zero" +coccilib.org.print_todo(p[0], msg) + +@script:python depends on report@ +p << r.p; +@@ + +msg = "WARNING: Unsigned value cannot be lesser than zero" +coccilib.report.print_report(p[0], msg) -- 1.9.1