From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2071) id 237FF38493C3; Sat, 10 Dec 2022 21:31:57 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 237FF38493C3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670707917; bh=8zvOT8Pka7dVrM6StLUsgye3iTRRmXM96rl50lR9YEw=; h=From:To:Subject:Date:From; b=TSVbMwL2hzSYAO9oGNYNP2JbJuyc+yBZbDAGBJlmk2k9PfHsStP+A82LNZsrDc35f a2BGLg0EEVIJ+jJh3XbZW3xvr0GNqF+e9224K6xo3AAxWS7QrJHZsl27XEzFje/Pyf +ZrzgqJci9gSBmxZE/V/cMmK1TDLGznozLNWzdiI= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Harald Anlauf To: gcc-cvs@gcc.gnu.org Subject: [gcc r13-4595] Fortran: reject bad SIZE argument while simplifying ISHFTC [PR106911] X-Act-Checkin: gcc X-Git-Author: Harald Anlauf X-Git-Refname: refs/heads/master X-Git-Oldrev: 7676235f690e624b7ed41a22b22ce8ccfac1492f X-Git-Newrev: ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1 Message-Id: <20221210213157.237FF38493C3@sourceware.org> Date: Sat, 10 Dec 2022 21:31:57 +0000 (GMT) List-Id: https://gcc.gnu.org/g:ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1 commit r13-4595-gae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1 Author: Harald Anlauf Date: Sat Dec 10 22:05:15 2022 +0100 Fortran: reject bad SIZE argument while simplifying ISHFTC [PR106911] gcc/fortran/ChangeLog: PR fortran/106911 * simplify.cc (gfc_simplify_ishftc): If the SIZE argument is known to be outside the allowed range, terminate simplification. gcc/testsuite/ChangeLog: PR fortran/106911 * gfortran.dg/pr106911.f90: New test. Diff: --- gcc/fortran/simplify.cc | 3 +++ gcc/testsuite/gfortran.dg/pr106911.f90 | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index aff9a1b8ced..3d3aaba84df 100644 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -3955,6 +3955,9 @@ gfc_simplify_ishftc (gfc_expr *e, gfc_expr *s, gfc_expr *sz) return NULL; gfc_extract_int (sz, &ssize); + + if (ssize > isize || ssize <= 0) + return &gfc_bad_expr; } else ssize = isize; diff --git a/gcc/testsuite/gfortran.dg/pr106911.f90 b/gcc/testsuite/gfortran.dg/pr106911.f90 new file mode 100644 index 00000000000..f3fe7f6ad68 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr106911.f90 @@ -0,0 +1,18 @@ +! { dg-do compile } +! PR fortran/106911 - ICE in gfc_convert_mpz_to_signed +! Contributed by G.Steinmetz + +program p + implicit none + integer, parameter :: a = 10 + integer, parameter :: b = 20 + integer, parameter :: c = ishftc(1_1, a, b) ! { dg-error "must be less than or equal" } + integer, parameter :: d = ishftc(1_1, a, 0) ! { dg-error "must be positive" } + interface + subroutine s + import :: a, b + integer, parameter :: e = ishftc(1_1, a, b) ! { dg-error "must be less than or equal" } + integer, parameter :: f = ishftc(1_1, a, 0) ! { dg-error "must be positive" } + end + end interface +end