Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2229951/?format=api
{ "id": 2229951, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2229951/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260428232824.1954220-1-dmalcolm@redhat.com/", "project": { "id": 17, "url": "http://patchwork.ozlabs.org/api/1.1/projects/17/?format=api", "name": "GNU Compiler Collection", "link_name": "gcc", "list_id": "gcc-patches.gcc.gnu.org", "list_email": "gcc-patches@gcc.gnu.org", "web_url": null, "scm_url": null, "webscm_url": null }, "msgid": "<20260428232824.1954220-1-dmalcolm@redhat.com>", "date": "2026-04-28T23:28:24", "name": "[pushed:,r17-186] analyzer: new warning: -Wanalyzer-div-by-zero (PR analyzer/124217)", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "d366d9dce0641cc3ee148740e2d4143e5efc17a0", "submitter": { "id": 24465, "url": "http://patchwork.ozlabs.org/api/1.1/people/24465/?format=api", "name": "David Malcolm", "email": "dmalcolm@redhat.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260428232824.1954220-1-dmalcolm@redhat.com/mbox/", "series": [ { "id": 501960, "url": "http://patchwork.ozlabs.org/api/1.1/series/501960/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=501960", "date": "2026-04-28T23:28:24", "name": "[pushed:,r17-186] analyzer: new warning: -Wanalyzer-div-by-zero (PR analyzer/124217)", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/501960/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2229951/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2229951/checks/", "tags": {}, "headers": { "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>", "X-Original-To": [ "incoming@patchwork.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Delivered-To": [ "patchwork-incoming@legolas.ozlabs.org", "gcc-patches@gcc.gnu.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UtuLEWnK;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)", "sourceware.org;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=UtuLEWnK", "sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com", "sourceware.org; spf=pass smtp.mailfrom=redhat.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124" ], "Received": [ "from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4xXs2Pbjz1yHX\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 09:31:57 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 5400B4BBC0FE\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 23:31:55 +0000 (GMT)", "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 3194E4BBC0E5\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 23:28:29 +0000 (GMT)", "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-609-RNDAEAZYMFyS65jOqRD6dA-1; Tue,\n 28 Apr 2026 19:28:27 -0400", "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 9A1D21800578\n for <gcc-patches@gcc.gnu.org>; Tue, 28 Apr 2026 23:28:26 +0000 (UTC)", "from t14s.localdomain.com (unknown [10.22.65.168])\n by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 1C04D1943295; Tue, 28 Apr 2026 23:28:25 +0000 (UTC)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 5400B4BBC0FE", "OpenDKIM Filter v2.11.0 sourceware.org 3194E4BBC0E5" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 3194E4BBC0E5", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 3194E4BBC0E5", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1777418909; cv=none;\n b=UOOpGj2E/K/Z1DIviuUPk9u4hQF/YwVJY9AT4vGYfuNeBEA3/pnxVAIbeKPR1Y7/8HWuZc3/93rGEG1/AB/ZvFPBrdlXXjg/F0wQ0cWFbXEHwXJxSSgmHZiYewG+zJs2Wm7sVASmYlfJ71aI0e6NtF1Bc/BMoQ2r3RLIIHmZQfc=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777418909; c=relaxed/simple;\n bh=x0TPZJJ7bGnCkEhQcwqLGRI0T5OxUbyHQGW+zPqfnPA=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=ughnFHhm94txGDLSlv9PyktqYIx4NB1g0ZyHLcfLF4wt+/cMdcdwpQhdzJKfgmVa9hP1Hzkj4Wlyvv3o8y89r88IuQmmPbnd4VcJ4PhHwF7JTexR6jU+Ij1YvOgAfK1O8Ph3ZGeFUuKI/ErIZycL81N+I1pa/N3xbyeKVTJjQSY=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1777418908;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=9XtVtizg+4lqyOYu/gJcXmS1+bmK6sTz+XKb5YK9+/0=;\n b=UtuLEWnKkTVXJ7x5licEOuZoVAqi9yWx4aseQtzEnp9eXgA7PRGw0VFEyM4ng2FUAi+9fh\n Kp747hoL/EPXs46jQs+rDamcdxrAzeXaJsoDQ6WdiANOTorJh1jMRhRozzyISvg771kQMa\n F/zCY+j7eLVZTsgWVfOTNZ1I5+c4HqU=", "X-MC-Unique": "RNDAEAZYMFyS65jOqRD6dA-1", "X-Mimecast-MFC-AGG-ID": "RNDAEAZYMFyS65jOqRD6dA_1777418906", "From": "David Malcolm <dmalcolm@redhat.com>", "To": "gcc-patches@gcc.gnu.org", "Cc": "David Malcolm <dmalcolm@redhat.com>", "Subject": "[pushed: r17-186] analyzer: new warning: -Wanalyzer-div-by-zero (PR\n analyzer/124217)", "Date": "Tue, 28 Apr 2026 19:28:24 -0400", "Message-ID": "<20260428232824.1954220-1-dmalcolm@redhat.com>", "MIME-Version": "1.0", "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17", "X-Mimecast-Spam-Score": "0", "X-Mimecast-MFC-PROC-ID": "fPV6BNwbkJBfC65iyfQJ61uaRBBK5vpGSELAlct68mA_1777418906", "X-Mimecast-Originator": "redhat.com", "Content-Transfer-Encoding": "8bit", "content-type": "text/plain; charset=\"US-ASCII\"; x-default=true", "X-BeenThere": "gcc-patches@gcc.gnu.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>", "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>", "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>", "List-Post": "<mailto:gcc-patches@gcc.gnu.org>", "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>", "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>", "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org" }, "content": "Successfully bootstrapped & regrtested on powerpc64le-unknown-linux-gnu\n(albeit without ada,cobol,d, and possibly missing some optional test dependencies)\nPushed to trunk as r17-186-g5b0937f037e3b3.\n\ngcc/analyzer/ChangeLog:\n\tPR analyzer/124217\n\t* analyzer.opt (Wanalyzer-div-by-zero): New.\n\t* analyzer.opt.urls: Regenerate.\n\t* region-model.cc (class div_by_zero_diagnostic): New.\n\t(region_model::get_gassign_result): Add warning for division by\n\tzero if ctxt is non-null. Bail out on such cases even if ctxt\n\tis null.\n\t* svalue.cc (type_can_have_value_range_p): Also handle frange.\n\ngcc/ChangeLog:\n\tPR analyzer/124217\n\t* doc/invoke.texi: Add -Wanalyzer-div-by-zero.\n\ngcc/testsuite/ChangeLog:\n\tPR analyzer/124217\n\t* c-c++-common/analyzer/divide-by-zero-1.c: Update to expect\n\t-Wanalyzer-div-by-zero.\n\t* c-c++-common/analyzer/divide-by-zero-pr124195-2.c: Likewise.\n\t* gcc.dg/analyzer/data-model-1.c (test_21): Split out division by\n\tzero cases into...\n\t(test_21_division_by_zero): ...this, and...\n\t(test_21_modulus_by_zero): ...this, updating these to expect\n\t-Wanalyzer-div-by-zero warnings.\n\t* gcc.dg/analyzer/divide-by-zero-float.c: New test.\n\t* gcc.dg/analyzer/divide-by-zero-ice-pr124433.c: Update to expect\n\t-Wanalyzer-div-by-zero.\n\t* gcc.dg/analyzer/divide-by-zero-pr124195-1.c: Likewise.\n\nSigned-off-by: David Malcolm <dmalcolm@redhat.com>\n---\n gcc/analyzer/analyzer.opt | 4 ++\n gcc/analyzer/analyzer.opt.urls | 3 +\n gcc/analyzer/region-model.cc | 69 +++++++++++++++----\n gcc/analyzer/svalue.cc | 8 ++-\n gcc/doc/invoke.texi | 13 ++++\n .../c-c++-common/analyzer/divide-by-zero-1.c | 4 +-\n .../analyzer/divide-by-zero-pr124195-2.c | 3 +-\n gcc/testsuite/gcc.dg/analyzer/data-model-1.c | 27 ++++++--\n .../gcc.dg/analyzer/divide-by-zero-float.c | 23 +++++++\n .../analyzer/divide-by-zero-ice-pr124433.c | 2 +-\n .../analyzer/divide-by-zero-pr124195-1.c | 2 +-\n 11 files changed, 132 insertions(+), 26 deletions(-)\n create mode 100644 gcc/testsuite/gcc.dg/analyzer/divide-by-zero-float.c", "diff": "diff --git a/gcc/analyzer/analyzer.opt b/gcc/analyzer/analyzer.opt\nindex 389f4ea946a..992ef9f8a08 100644\n--- a/gcc/analyzer/analyzer.opt\n+++ b/gcc/analyzer/analyzer.opt\n@@ -78,6 +78,10 @@ Wanalyzer-deref-before-check\n Common Var(warn_analyzer_deref_before_check) Init(1) Warning\n Warn about code paths in which a pointer is checked for NULL after it has already been dereferenced.\n \n+Wanalyzer-div-by-zero\n+Common Var(warn_analyzer_div_by_zero) Init(1) Warning\n+Warn about code paths which attempt integer division by zero.\n+\n Wanalyzer-double-fclose\n Common Var(warn_analyzer_double_fclose) Init(1) Warning\n Warn about code paths in which a stdio FILE can be closed more than once.\ndiff --git a/gcc/analyzer/analyzer.opt.urls b/gcc/analyzer/analyzer.opt.urls\nindex db56a7209e9..833d0d76c76 100644\n--- a/gcc/analyzer/analyzer.opt.urls\n+++ b/gcc/analyzer/analyzer.opt.urls\n@@ -6,6 +6,9 @@ UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-allocation-size)\n Wanalyzer-deref-before-check\n UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-deref-before-check)\n \n+Wanalyzer-div-by-zero\n+UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-div-by-zero)\n+\n Wanalyzer-double-fclose\n UrlSuffix(gcc/Static-Analyzer-Options.html#index-Wanalyzer-double-fclose)\n \ndiff --git a/gcc/analyzer/region-model.cc b/gcc/analyzer/region-model.cc\nindex 02b00bc03c9..e4bafebbaa4 100644\n--- a/gcc/analyzer/region-model.cc\n+++ b/gcc/analyzer/region-model.cc\n@@ -855,6 +855,46 @@ private:\n const region *m_base_reg_b;\n };\n \n+class div_by_zero_diagnostic\n+: public pending_diagnostic_subclass<div_by_zero_diagnostic>\n+{\n+public:\n+ div_by_zero_diagnostic (const gassign *assign)\n+ : m_assign (assign)\n+ {}\n+\n+ const char *get_kind () const final override\n+ {\n+ return \"div_by_zero_diagnostic\";\n+ }\n+\n+ bool operator== (const div_by_zero_diagnostic &other) const\n+ {\n+ return m_assign == other.m_assign;\n+ }\n+\n+ int get_controlling_option () const final override\n+ {\n+ return OPT_Wanalyzer_div_by_zero;\n+ }\n+\n+ bool emit (diagnostic_emission_context &ctxt) final override\n+ {\n+ return ctxt.warn (\"division by zero\");\n+ }\n+\n+ bool\n+ describe_final_event (pretty_printer &pp,\n+\t\t\tconst evdesc::final_event &) final override\n+ {\n+ pp_printf (&pp, \"division by zero\");\n+ return true;\n+ }\n+\n+private:\n+ const gassign *m_assign;\n+};\n+\n /* Check the pointer subtraction SVAL_A - SVAL_B at ASSIGN and add\n a warning to CTXT if they're not within the same base region. */\n \n@@ -1073,24 +1113,27 @@ region_model::get_gassign_result (const gassign *assign,\n \t\t}\n \t }\n \n-\tif (ctxt\n-\t && (op == TRUNC_DIV_EXPR\n-\t\t|| op == CEIL_DIV_EXPR\n-\t\t|| op == FLOOR_DIV_EXPR\n-\t\t|| op == ROUND_DIV_EXPR\n-\t\t|| op == TRUNC_MOD_EXPR\n-\t\t|| op == CEIL_MOD_EXPR\n-\t\t|| op == FLOOR_MOD_EXPR\n-\t\t|| op == ROUND_MOD_EXPR\n-\t\t|| op == RDIV_EXPR\n-\t\t|| op == EXACT_DIV_EXPR))\n+\tif (op == TRUNC_DIV_EXPR\n+\t || op == CEIL_DIV_EXPR\n+\t || op == FLOOR_DIV_EXPR\n+\t || op == ROUND_DIV_EXPR\n+\t || op == TRUNC_MOD_EXPR\n+\t || op == CEIL_MOD_EXPR\n+\t || op == FLOOR_MOD_EXPR\n+\t || op == ROUND_MOD_EXPR\n+\t || op == RDIV_EXPR\n+\t || op == EXACT_DIV_EXPR)\n \t {\n \t value_range rhs_vr;\n \t if (rhs2_sval->maybe_get_value_range (rhs_vr))\n \t if (rhs_vr.zero_p ())\n \t\t{\n-\t\t /* Ideally we should issue a warning here;\n-\t\t see PR analyzer/124217. */\n+\t\t if (ctxt)\n+\t\t {\n+\t\t ctxt->warn\n+\t\t\t(std::make_unique<div_by_zero_diagnostic> (assign));\n+\t\t ctxt->terminate_path ();\n+\t\t }\n \t\t return nullptr;\n \t\t}\n \t }\ndiff --git a/gcc/analyzer/svalue.cc b/gcc/analyzer/svalue.cc\nindex daf2f3ccd8f..824da5df793 100644\n--- a/gcc/analyzer/svalue.cc\n+++ b/gcc/analyzer/svalue.cc\n@@ -891,9 +891,11 @@ type_can_have_value_range_p (tree type)\n {\n if (!type)\n return false;\n- if (!irange::supports_p (type))\n- return false;\n- return true;\n+ if (irange::supports_p (type))\n+ return true;\n+ if (frange::supports_p (type))\n+ return true;\n+ return false;\n }\n \n /* Base implementation of svalue::maybe_get_value_range_1 vfunc.\ndiff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi\nindex 81b14ab7cf0..9604d6ce3d9 100644\n--- a/gcc/doc/invoke.texi\n+++ b/gcc/doc/invoke.texi\n@@ -11555,6 +11555,7 @@ Enabling this option effectively enables the following warnings:\n @gccoptlist{\n -Wanalyzer-allocation-size\n -Wanalyzer-deref-before-check\n+-Wanalyzer-div-by-zero\n -Wanalyzer-double-fclose\n -Wanalyzer-double-free\n -Wanalyzer-exposure-through-output-file\n@@ -11646,6 +11647,18 @@ multiple of @code{sizeof (*pointer)}.\n \n See @uref{https://cwe.mitre.org/data/definitions/131.html, CWE-131: Incorrect Calculation of Buffer Size}.\n \n+@opindex Wanalyzer-div-by-zero\n+@opindex Wno-analyzer-div-by-zero\n+@item -Wno-analyzer-div-by-zero\n+This warning requires @option{-fanalyzer}, which enables it;\n+to disable it, use @option{-Wno-analyzer-div-by-zero}.\n+\n+This diagnostic warns for paths through the code which attempt\n+integer division by zero. It is analogous to @option{-Wdiv-by-zero}, but\n+implemented in a different way.\n+\n+See @uref{https://cwe.mitre.org/data/definitions/369.html, CWE-369: Divide By Zero}.\n+\n @opindex Wanalyzer-deref-before-check\n @opindex Wno-analyzer-deref-before-check\n @item -Wno-analyzer-deref-before-check\ndiff --git a/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-1.c b/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-1.c\nindex 5fbfe9c52ea..0d0b8e01157 100644\n--- a/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-1.c\n+++ b/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-1.c\n@@ -9,11 +9,11 @@ return_zero (void)\n void\n test_div (int a)\n {\n- __analyzer_eval (a / return_zero () == 0); /* { dg-warning \"UNKNOWN\" } */\n+ __analyzer_eval (a / return_zero () == 0); /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n }\n \n void\n test_mod (int a)\n {\n- __analyzer_eval (a % return_zero () == 0); /* { dg-warning \"UNKNOWN\" } */\n+ __analyzer_eval (a % return_zero () == 0); /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n }\ndiff --git a/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-pr124195-2.c b/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-pr124195-2.c\nindex cac91e57d3c..dc2edc9958e 100644\n--- a/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-pr124195-2.c\n+++ b/gcc/testsuite/c-c++-common/analyzer/divide-by-zero-pr124195-2.c\n@@ -3,6 +3,7 @@ short s;\n int\n foo()\n {\n- s %= 0; /* { dg-warning \"division by zero\" } */\n+ s %= 0; /* { dg-warning \"division by zero \\\\\\[-Wdiv-by-zero\\\\\\]\" } */\n+ /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" \"\" { target *-*-* } .-1 } */\n return s > 0;\n }\ndiff --git a/gcc/testsuite/gcc.dg/analyzer/data-model-1.c b/gcc/testsuite/gcc.dg/analyzer/data-model-1.c\nindex ce77d125477..35699e0bb1e 100644\n--- a/gcc/testsuite/gcc.dg/analyzer/data-model-1.c\n+++ b/gcc/testsuite/gcc.dg/analyzer/data-model-1.c\n@@ -421,11 +421,6 @@ void test_21 (void)\n __analyzer_eval (i / j == 1); /* { dg-warning \"TRUE\" } */\n __analyzer_eval (i % j == 2); /* { dg-warning \"TRUE\" } */\n \n- /* Division by zero. */\n- // TODO: should we warn for this?\n- __analyzer_eval (i / zero); /* { dg-warning \"UNKNOWN\" } */\n- __analyzer_eval (i % zero); /* { dg-warning \"UNKNOWN\" } */\n-\n __analyzer_eval ((i & 1) == (5 & 1)); /* { dg-warning \"TRUE\" } */\n __analyzer_eval ((i & j) == (5 & 3)); /* { dg-warning \"TRUE\" } */\n __analyzer_eval ((i | 1) == (5 | 1)); /* { dg-warning \"TRUE\" } */\n@@ -449,6 +444,28 @@ void test_21 (void)\n __analyzer_eval (+i == +5); /* { dg-warning \"TRUE\" } */\n }\n \n+void test_21_division_by_zero (void)\n+{\n+ int i, zero;\n+ int *pi = &i;\n+ int *pzero = &zero;\n+ *pi = 5;\n+ *pzero = 0;\n+\n+ __analyzer_eval (i / zero); /* { dg-warning \"Wanalyzer-div-by-zero\" } */\n+}\n+\n+void test_21_modulus_by_zero (void)\n+{\n+ int i, zero;\n+ int *pi = &i;\n+ int *pzero = &zero;\n+ *pi = 5;\n+ *pzero = 0;\n+\n+ __analyzer_eval (i % zero); /* { dg-warning \"Wanalyzer-div-by-zero\" } */\n+}\n+\n void test_22 (int i, int j)\n {\n __analyzer_eval (i + j == i + j); /* { dg-warning \"TRUE\" } */\ndiff --git a/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-float.c b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-float.c\nnew file mode 100644\nindex 00000000000..3aaee568bc1\n--- /dev/null\n+++ b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-float.c\n@@ -0,0 +1,23 @@\n+float\n+test_1 ()\n+{\n+ return 42.f / 0.f; /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n+}\n+\n+static float __attribute__((noinline))\n+get_zero ()\n+{\n+ return 0.f;\n+}\n+\n+float\n+test_2 ()\n+{\n+ return 42.f / get_zero (); /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n+}\n+\n+float\n+test_3 (float x)\n+{\n+ return x / get_zero (); /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n+}\ndiff --git a/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-ice-pr124433.c b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-ice-pr124433.c\nindex 9b52ac8cc5b..0853939e5b1 100644\n--- a/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-ice-pr124433.c\n+++ b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-ice-pr124433.c\n@@ -4,6 +4,6 @@ int c;\n void\n foo()\n {\n- do c %= (5ull << 40) & m;\n+ do c %= (5ull << 40) & m; /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n while (c);\n }\ndiff --git a/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-pr124195-1.c b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-pr124195-1.c\nindex 6be17ed61d4..d11cfeb4f97 100644\n--- a/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-pr124195-1.c\n+++ b/gcc/testsuite/gcc.dg/analyzer/divide-by-zero-pr124195-1.c\n@@ -3,6 +3,6 @@ short s;\n int\n foo()\n {\n- s %= (0, 0);\n+ s %= (0, 0); /* { dg-warning \"division by zero \\\\\\[-Wanalyzer-div-by-zero\\\\\\]\" } */\n return s > 0;\n }\n", "prefixes": [ "pushed:", "r17-186" ] }