From patchwork Wed May 31 03:22:05 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luc Van Oostenryck X-Patchwork-Id: 9755725 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C4D9A602CA for ; Wed, 31 May 2017 03:22:25 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B7DC3223A6 for ; Wed, 31 May 2017 03:22:25 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ACC4A28481; Wed, 31 May 2017 03:22:25 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 525D6223A6 for ; Wed, 31 May 2017 03:22:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751088AbdEaDWZ (ORCPT ); Tue, 30 May 2017 23:22:25 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35588 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751090AbdEaDWX (ORCPT ); Tue, 30 May 2017 23:22:23 -0400 Received: by mail-wm0-f68.google.com with SMTP id g15so1020270wmc.2 for ; Tue, 30 May 2017 20:22:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=jNWLJwylYbTQefQVQWeyfKUDC8Z3/ucpNX8eIa9GvKs=; b=unCFj7rGcxxlSrdskYgbDE8bDfPWIQFjPGZiB41KdSRD5I7L6G4qCdRIwysv7grnhX BTun21DsJEuYGeKT23uKjZEsA98/aoBdnBj7XDJrXliyhmsaC0BWNJr1BCXS28O/g5kr 8Q0YzZpT6jdF58sTuWMuAMSHiM9wDV2fgaIIhkyF5mArplXc/kqBnRP4CTSTpo4kh6Ga 6LFh+hTRDmidzEj1VrlX7Hy1qa1EiHz3+CqALKftpHXD1rVOeaZ6pMeWLVB53lEsJ6Gy DyK5RP8KoOOUdlpdVc5SF/b4Fzi1RzAAn7II75+2ENN0Y+g9Hfh+03OZdzQUkYYAEzjz uROw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=jNWLJwylYbTQefQVQWeyfKUDC8Z3/ucpNX8eIa9GvKs=; b=Y28iER+S5AL84+SXYeyD8fpvi1urnAPvfYJRba2EFi0LZ381u7hpQX4KA91+4Subj9 R0k4jrwWD8cnrWOO6KJRdXrC8fBKatM8Iq10t0nFevdCl90vS2ROZc9RSllNdMVXEWeW Mtl4p44pQKpOTtyF/RDbOgZ4UAkaFAHrU/RumZdvs95mfA0QoFCiID+1H7/jybxwjMFv mKYZ+KoSp2VeLdkuWZEWSrhCJlSA+kXlzCuGnjn2RDblmpVhgxQZkEA1k6Vj5v3yhMoC eOR+FkWe4AMv/SN2xGbyePr+rgo4cCqP2S6TdGHDkBSP0OgOPxhaKxYzObyAqYt6bUQU qxWQ== X-Gm-Message-State: AODbwcBYe0jQuGG+BgMD+exsB6hrceqz0al08aK5AwMcvvu2r2Dyi2mE hG0OTSXh93mcRSGeCVU= X-Received: by 10.28.229.144 with SMTP id c138mr3461806wmh.60.1496200942251; Tue, 30 May 2017 20:22:22 -0700 (PDT) Received: from localhost.localdomain ([2a02:a03f:89c:5400:25d0:8511:1e85:9d96]) by smtp.gmail.com with ESMTPSA id y3sm31676991wmh.21.2017.05.30.20.22.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 May 2017 20:22:21 -0700 (PDT) From: Luc Van Oostenryck To: linux-sparse@vger.kernel.org Cc: Luc Van Oostenryck Subject: [PATCH 7/9] div0: warn also during simplification Date: Wed, 31 May 2017 05:22:05 +0200 Message-Id: <20170531032207.95830-8-luc.vanoostenryck@gmail.com> X-Mailer: git-send-email 2.13.0 In-Reply-To: <20170531032207.95830-1-luc.vanoostenryck@gmail.com> References: <20170531032207.95830-1-luc.vanoostenryck@gmail.com> Sender: linux-sparse-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sparse@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP sparse now warn about divion by zero during linearization but during simplification some expression can become constants and so some new divisions by zero can appears. Warn also on those new and to avoid to warn also here on the old ones, mark the instructions for wich we have already be warned. Signed-off-by: Luc Van Oostenryck --- linearize.c | 1 + simplify.c | 12 ++++++++++++ validation/div-by-zero.c | 2 ++ 3 files changed, 15 insertions(+) diff --git a/linearize.c b/linearize.c index 604a67b82..51405539d 100644 --- a/linearize.c +++ b/linearize.c @@ -969,6 +969,7 @@ static void warn_undef_insn(struct instruction *insn, int warn) if (is_pseudo_value(insn->src2, 0)) { if (warn && Wdiv_by_zero) warning(insn->pos, "division by zero"); + insn->warned = 1; } break; default: diff --git a/simplify.c b/simplify.c index a141ddd43..40e1c253b 100644 --- a/simplify.c +++ b/simplify.c @@ -404,6 +404,15 @@ static int simplify_asr(struct instruction *insn, pseudo_t pseudo, long long val return 0; } +static void check_divide_by_zero(struct instruction *insn, long long value) +{ + if (value != 0 || insn->warned) + return; + if (Wdiv_by_zero) + warning(insn->pos, "division by zero"); + insn->warned = 1; +} + static int simplify_mul_div(struct instruction *insn, long long value) { unsigned long long sbit = 1ULL << (insn->size - 1); @@ -525,9 +534,12 @@ static int simplify_constant_rightside(struct instruction *insn) case OP_MODU: case OP_MODS: if (value == 1) return replace_with_pseudo(insn, value_pseudo(0)); + check_divide_by_zero(insn, value); return 0; case OP_DIVU: case OP_DIVS: + check_divide_by_zero(insn, value); + /* Fall through */ case OP_MULU: case OP_MULS: return simplify_mul_div(insn, value); diff --git a/validation/div-by-zero.c b/validation/div-by-zero.c index a06944a58..353c85889 100644 --- a/validation/div-by-zero.c +++ b/validation/div-by-zero.c @@ -49,7 +49,9 @@ div-by-zero.c:18:30: warning: division by zero div-by-zero.c:19:30: warning: division by zero div-by-zero.c:21:42: warning: division by zero div-by-zero.c:22:33: warning: division by zero +div-by-zero.c:23:38: warning: division by zero div-by-zero.c:25:42: warning: division by zero div-by-zero.c:26:33: warning: division by zero +div-by-zero.c:27:38: warning: division by zero * check-error-end */