Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2221617/?format=api
{ "id": 2221617, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2221617/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/b7d9dcdd-6638-4e12-8580-89696c06fd90@gmail.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": "<b7d9dcdd-6638-4e12-8580-89696c06fd90@gmail.com>", "date": "2026-04-10T00:52:46", "name": "[fortran] Fix Bug 94978 - [13/14/15/16 Regression] Bogus warning \"Array reference at (1) out of bounds ...\"", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "6d8950ae4368a500ce1e1677d142414e64131e93", "submitter": { "id": 78264, "url": "http://patchwork.ozlabs.org/api/1.1/people/78264/?format=api", "name": "Jerry D", "email": "jvdelisle2@gmail.com" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/b7d9dcdd-6638-4e12-8580-89696c06fd90@gmail.com/mbox/", "series": [ { "id": 499374, "url": "http://patchwork.ozlabs.org/api/1.1/series/499374/?format=api", "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=499374", "date": "2026-04-10T00:52:46", "name": "[fortran] Fix Bug 94978 - [13/14/15/16 Regression] Bogus warning \"Array reference at (1) out of bounds ...\"", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/499374/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2221617/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2221617/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 (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=UsiIZp7B;\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 (2048-bit key,\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=UsiIZp7B", "sourceware.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com", "sourceware.org; spf=pass smtp.mailfrom=gmail.com", "server2.sourceware.org;\n arc=none smtp.remote-ip=209.85.216.43" ], "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 4fsJFY5vfZz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 10:53:19 +1000 (AEST)", "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 536174BA2E15\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 10 Apr 2026 00:53:17 +0000 (GMT)", "from mail-pj1-f43.google.com (mail-pj1-f43.google.com\n [209.85.216.43])\n by sourceware.org (Postfix) with ESMTPS id 605BA4BA2E0F\n for <gcc-patches@gcc.gnu.org>; Fri, 10 Apr 2026 00:52:49 +0000 (GMT)", "by mail-pj1-f43.google.com with SMTP id\n 98e67ed59e1d1-358d80f60ccso1087554a91.3\n for <gcc-patches@gcc.gnu.org>; Thu, 09 Apr 2026 17:52:49 -0700 (PDT)", "from [10.168.168.66] ([50.37.179.80])\n by smtp.gmail.com with ESMTPSA id\n 98e67ed59e1d1-35e4122344esm1053619a91.7.2026.04.09.17.52.47\n (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);\n Thu, 09 Apr 2026 17:52:47 -0700 (PDT)" ], "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 sourceware.org 536174BA2E15", "OpenDKIM Filter v2.11.0 sourceware.org 605BA4BA2E0F" ], "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 605BA4BA2E0F", "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 605BA4BA2E0F", "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775782369; cv=none;\n b=MuaPj0n6jlYduulhRV1UVsYQ/lCG8YPasT5rvJxo5uv/3WN0XbZto7OPTK5cJVNeYQe1NeO0brH9QU0qzalDFKSrwZslZlMHbLDaZoUSRZxDA2Qv+Md44ZzFo2ZB7hi0fi04YiRXhuPUq7m3s17uRh+2tPhti1fylAgBuSw51Q4=", "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775782369; c=relaxed/simple;\n bh=ZXOX817gdAbcJu1U2hOhvlic4TaVzRgfWo/6unCAVxc=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject;\n b=NlxqYTxgfOHve0vyXmligCyWugrgrcITnHv2OmFJ9lVWd5xOTbHYeR9YywkbmARZ63Ts35bSL5OTR1GqqY/fnsmyLGmdsrjPCADhILZY9fIFu/TNn1WYxO7n/P5CWh7hSl6gB/6iEkFP0oRtZqT5or95tef5VO5HfCa7nPxS3pI=", "ARC-Authentication-Results": "i=1; server2.sourceware.org", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=gmail.com; s=20251104; t=1775782368; x=1776387168; darn=gcc.gnu.org;\n h=autocrypt:subject:from:cc:to:content-language:user-agent\n :mime-version:date:message-id:from:to:cc:subject:date:message-id\n :reply-to; bh=q3/0TSgD0wIBpZor8WDc3NDyzUNTgraMQbWFLFsSP7o=;\n b=UsiIZp7BrEhfDh5+9DipcUVzQdGKZGP7ECNjAMStFiVdV3tpAU4O/M5SReMPnzn66a\n +m0W1vqTwzeL4dYj1yF+cxLhsBup1a4StSUDOpUgc7aVFmD09ykufj3UHvA4S69zdt6U\n DWHdg1IUh69oftjA/M0BQlooGx9W5L8QZBhM7zE7+UXhtL8Kbpp+ssAMkdmI/2w5SwjI\n 0MwExx0uCocC0cO+efs7iK5Q8FX2riMa4//WUzngzbP2TXZChoXWOBbfK2+I81NhOaI6\n /tZAhPNXunE3d828RknMgvWaTBymTelNjVxZKN348idJoVkqbg2lSSUSXRjUIjevKUI2\n DTFQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1775782368; x=1776387168;\n h=autocrypt:subject:from:cc:to:content-language:user-agent\n :mime-version:date:message-id:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=q3/0TSgD0wIBpZor8WDc3NDyzUNTgraMQbWFLFsSP7o=;\n b=YQeFMjgSQ6gjJTDiSmjkbVyr7bUzOzL4RovXwXe92I5gA+pZwELwbFroDFrulhPg50\n l1WxRADPpzwu+s1tY5yOqkhly02xJ455+ofa7awQW4csWqtfnYCYW1JWj1Qg7T5XUOXK\n KwiBhdzNSVOa0cv9wqlS83MiFnqH7DhIQosN9BEPmp2OYpJ6XpJbu/rQc8JMCcmZFCka\n fU00YdAe/Zbp5gTB/Yz7SKQtEPl7EL1dPuttTuV0WjC3evXp3MWnP7qwjcqcWvTeiX6y\n 08AD9tB2lsf98VCFgpcHnCYOKrtNLxlk1QnEV8QOSDj8uz6BrjK65iGwfDK7ZC2VFtXk\n Q85Q==", "X-Forwarded-Encrypted": "i=1;\n AJvYcCWnuIok7MeqxlKWKbqQnqxd+kC7xlru0316PRYfe7vxQkUoaZRA0cEo2YhZ44BDJNPJWygRiFxxnzTbtQ==@gcc.gnu.org", "X-Gm-Message-State": "AOJu0YwyoIL2+/maJXzjCmcqdIBRrMoQEyF+CC1qlj6NSLCqvReZXsKP\n f/grN2W+jXOJx5HE5Gs4Sk5Ns1zf6vTUXq3QfZKnNCQjNFBqqhCxm9PA", "X-Gm-Gg": "AeBDieutbqxEVsciFvDMl8JeAgUFm6EsV/on74JqBlZgvg0OEEWjBRI/4dJPfBQ2O5G\n 8qDQIbuCPIadFEiv/WCeNFeV8w/Tz7YIgEPDN4Zo24d1ghlQr537SELWP+/69DJe5PSDaXhz7Zp\n hEGz/XqDiVT/Ku62wI7IMUGyxmaGPborfm0HhmhLPcyAhQFrtX0E67CWx1eTUxo4dv7eCgIn3mX\n pSrCNgyrC+aprGlfKM1DnUDVBQavBzT0tY2mxJi2/4fkDdNGl/Xa+RA5eaQ/dh0PFqFW/BIngxN\n TOdWENa1BtIrdpF/qNVcnpAdEQm1qO99sTW3xJ7Vm+Oab5ocPQegcSrDYfL7QxNP+5Irj0TQoBZ\n sMYF5ozI/EYoGdI4ROHjg3AixhBsHcxoXQ0aHT2egcUn3NNq/FBOeUTdhESPXQtO5cErrxvd2O4\n fBer3LbHDOmizFmSIPyKU1cnz9B4Y=", "X-Received": "by 2002:a17:90b:4d10:b0:35b:e553:9cc2 with SMTP id\n 98e67ed59e1d1-35e42847a40mr1209590a91.26.1775782368107;\n Thu, 09 Apr 2026 17:52:48 -0700 (PDT)", "Content-Type": "multipart/mixed; boundary=\"------------cWDi5lzKEf00OHHDaALvKp2c\"", "Message-ID": "<b7d9dcdd-6638-4e12-8580-89696c06fd90@gmail.com>", "Date": "Thu, 9 Apr 2026 17:52:46 -0700", "MIME-Version": "1.0", "User-Agent": "Mozilla Thunderbird", "Content-Language": "en-US", "To": "gfortran <fortran@gcc.gnu.org>, gcc-patches <gcc-patches@gcc.gnu.org>", "Cc": "Harald Anlauf <anlauf@gmx.de>, Thomas Koenig <tkoenig@netcologne.de>,\n Paul Richard Thomas <paul.richard.thomas@gmail.com>", "From": "Jerry D <jvdelisle2@gmail.com>", "Subject": "[PATCH,fortran] Fix Bug 94978 - [13/14/15/16 Regression] Bogus\n warning \"Array reference at (1) out of bounds ...\"", "Autocrypt": "addr=jvdelisle2@gmail.com; keydata=\n xjMEY5TlkxYJKwYBBAHaRw8BAQdAyrkRDhmJhSTTlV/50gJLlvliU6/Lm5C9ViKV8T9y1GnN\n HkplcnJ5IEQgPGp2ZGVsaXNsZTJAZ21haWwuY29tPsKJBBMWCAAxFiEEOFR0TS0390uh8dRV\n uWXAJaWpwWoFAmOU5ZMCGwMECwkIBwUVCAkKCwUWAgMBAAAKCRC5ZcAlpanBalsJAP4wdCiH\n 2Of9oZv1QWgZ/AVdbWFM3Fv47/WZQHOXfoZ9HgD6AkXrKeJ+6usST7PEaDJjptaViT1fLiYY\n V/6XaOKSsgLOOARjlOWTEgorBgEEAZdVAQUBAQdAdA7PczYnl07vnOT9oP/wvvMDd4HP09Zl\n g3LzwXQJWT8DAQgHwngEGBYIACAWIQQ4VHRNLTf3S6Hx1FW5ZcAlpanBagUCY5TlkwIbDAAK\n CRC5ZcAlpanBasF/AQCa5WjlsVpLsEiggZyT18MOJNAdeRd7wkGDUrwedHrvawD/cE1H+/Ms\n L1ZwvQiLfGdx8crigQqWTQyos4kH8Wx82wc=", "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": "Hi all,\n\nThe attached patch avoids the bogus warning. I completed regression testing on \nx86_64.\n\nI would appreciate others to take a look.\n\nOK to commit on mainline?\n\nRegards,\n\nJerry\n---\n\nfortran: Avoid bogus do-subscript warnings in skipped inner\n loops [PR94978]\n\nDo not warn from an outer-loop bound substitution when a nested inner loop may\nbe zero-trip after that substitution, because the guarded array reference may\nthen be unreachable.\n\ngcc/fortran/ChangeLog:\n\n\tPR fortran/94978\n\t* frontend-passes.cc (evaluate_loop_bound): New helper.\n\t(inner_loop_may_be_skipped): New helper.\n\t(do_subscript): Skip outer-loop bound warnings when nested inner loops\n\tmay be zero-trip for the substituted bound.\n\ngcc/testsuite/ChangeLog:\n\n\tPR fortran/94978\n\t* gfortran.dg/pr94978.f90: New test.\n\nSigned-off-by: Christopher Albert <albert@tugraz.at>", "diff": "From f87d2443e27cafde0de1923cd186be92f9cef2a0 Mon Sep 17 00:00:00 2001\nFrom: Christopher Albert <albert@tugraz.at>\nDate: Sat, 28 Mar 2026 17:26:05 +0100\nSubject: [PATCH] fortran: Avoid bogus do-subscript warnings in skipped inner\n loops [PR94978]\n\nDo not warn from an outer-loop bound substitution when a nested inner loop may\nbe zero-trip after that substitution, because the guarded array reference may\nthen be unreachable.\n\ngcc/fortran/ChangeLog:\n\n\tPR fortran/94978\n\t* frontend-passes.cc (evaluate_loop_bound): New helper.\n\t(inner_loop_may_be_skipped): New helper.\n\t(do_subscript): Skip outer-loop bound warnings when nested inner loops\n\tmay be zero-trip for the substituted bound.\n\ngcc/testsuite/ChangeLog:\n\n\tPR fortran/94978\n\t* gfortran.dg/pr94978.f90: New test.\n\nSigned-off-by: Christopher Albert <albert@tugraz.at>\n---\n gcc/fortran/frontend-passes.cc | 69 ++++++++++++++++++++++++++-\n gcc/testsuite/gfortran.dg/pr94978.f90 | 24 ++++++++++\n 2 files changed, 91 insertions(+), 2 deletions(-)\n create mode 100644 gcc/testsuite/gfortran.dg/pr94978.f90\n\ndiff --git a/gcc/fortran/frontend-passes.cc b/gcc/fortran/frontend-passes.cc\nindex 56d8e21b9f4..fa508794e20 100644\n--- a/gcc/fortran/frontend-passes.cc\n+++ b/gcc/fortran/frontend-passes.cc\n@@ -2746,6 +2746,66 @@ insert_index (gfc_expr *e, gfc_symbol *sym, mpz_t val, mpz_t ret)\n \n }\n \n+static bool\n+evaluate_loop_bound (gfc_expr *e, gfc_symbol *sym, mpz_t val, mpz_t ret)\n+{\n+ if (e->expr_type == EXPR_CONSTANT)\n+ {\n+ mpz_init_set (ret, e->value.integer);\n+ return true;\n+ }\n+\n+ return insert_index (e, sym, val, ret);\n+}\n+\n+/* Return true if any loop nested inside LOOP_INDEX is not provably entered\n+ after substituting OUTER_VAL for OUTER_SYM. In that case the guarded array\n+ reference may never be evaluated, so do not warn from the outer loop alone. */\n+\n+static bool\n+inner_loop_may_be_skipped (int loop_index, gfc_symbol *outer_sym, mpz_t outer_val)\n+{\n+ int k;\n+ do_t *lp;\n+\n+ FOR_EACH_VEC_ELT_FROM (doloop_list, k, lp, loop_index + 1)\n+ {\n+ gfc_code *loop = lp->c;\n+ int sgn, cmp;\n+ mpz_t do_start, do_end, do_step;\n+\n+ if (loop == NULL || loop->ext.iterator == NULL || loop->ext.iterator->var == NULL)\n+\treturn true;\n+\n+ if (!evaluate_loop_bound (loop->ext.iterator->step, outer_sym, outer_val, do_step))\n+\treturn true;\n+\n+ sgn = mpz_cmp_ui (do_step, 0);\n+ if (sgn == 0)\n+\t{\n+\t mpz_clear (do_step);\n+\t return true;\n+\t}\n+\n+ if (!evaluate_loop_bound (loop->ext.iterator->start, outer_sym, outer_val, do_start)\n+\t || !evaluate_loop_bound (loop->ext.iterator->end, outer_sym, outer_val, do_end))\n+\t{\n+\t mpz_clear (do_step);\n+\t return true;\n+\t}\n+\n+ cmp = mpz_cmp (do_end, do_start);\n+ mpz_clear (do_start);\n+ mpz_clear (do_end);\n+ mpz_clear (do_step);\n+\n+ if ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0))\n+\treturn true;\n+ }\n+\n+ return false;\n+}\n+\n /* Check array subscripts for possible out-of-bounds accesses in DO\n loops with constant bounds. */\n \n@@ -2880,10 +2940,15 @@ do_subscript (gfc_expr **e)\n \t\t mpz_clear (rem);\n \t\t}\n \n+\t bool skip_start = have_do_start\n+\t\t\t\t&& inner_loop_may_be_skipped (j, do_sym, do_start);\n+\t bool skip_end = have_do_end\n+\t\t\t && inner_loop_may_be_skipped (j, do_sym, do_end);\n+\n \t for (i = 0; i< ar->dimen; i++)\n \t\t{\n \t\t mpz_t val;\n-\t\t if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_start\n+\t\t if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_start && !skip_start\n \t\t && insert_index (ar->start[i], do_sym, do_start, val))\n \t\t {\n \t\t if (ar->as->lower[i]\n@@ -2909,7 +2974,7 @@ do_subscript (gfc_expr **e)\n \t\t mpz_clear (val);\n \t\t }\n \n-\t\t if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_end\n+\t\t if (ar->dimen_type[i] == DIMEN_ELEMENT && have_do_end && !skip_end\n \t\t && insert_index (ar->start[i], do_sym, do_end, val))\n \t\t {\n \t\t if (ar->as->lower[i]\ndiff --git a/gcc/testsuite/gfortran.dg/pr94978.f90 b/gcc/testsuite/gfortran.dg/pr94978.f90\nnew file mode 100644\nindex 00000000000..5d64d227fdc\n--- /dev/null\n+++ b/gcc/testsuite/gfortran.dg/pr94978.f90\n@@ -0,0 +1,24 @@\n+! { dg-do compile }\n+! { dg-options \"-Wdo-subscript\" }\n+\n+implicit none\n+\n+integer(4) :: i, j\n+integer(4) :: pascal(0:8, 0:8)\n+\n+do i = 0, 8\n+ pascal(i, 0) = 1\n+ do j = 1, i - 1\n+ pascal(i, j) = pascal(i - 1, j) + pascal(i - 1, j - 1) ! { dg-bogus \"Array reference at \\\\(1\\\\) out of bounds\" }\n+ end do\n+ do j = i, 8\n+ pascal(i, j) = 0\n+ end do\n+ pascal(i, i) = 1\n+end do\n+\n+do i = 0, 8\n+ print '(9I4)', pascal(i, :)\n+end do\n+\n+end\n-- \n2.53.0\n\n", "prefixes": [ "fortran" ] }