From patchwork Sat Dec 10 21:14:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 61757 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id F17063870542 for ; Sat, 10 Dec 2022 21:14:36 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org F17063870542 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1670706877; bh=To409pZp943xi07BsGm8hsU00K1xDOg4DHMlcWSrn68=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=x0kw8qy2V5pwZPyd2Xj2sno/ybYn1lw3B13dLK0BHNROyn5GPnRo9dI7ZD3q1fqcD ju0zDYotiXBIOCuUrHm7T/bDhwo+8wQE8ETFAeEvV/EF3aTsWF18PFZeVF9yPBl9a0 7qJnK7+Hm6xoksHv/Y1ei8ExnQm1kgMn15iZKiB4= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by sourceware.org (Postfix) with ESMTPS id 40EED38500BE; Sat, 10 Dec 2022 21:14:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 40EED38500BE X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [93.207.84.200] ([93.207.84.200]) by web-mail.gmx.net (3c-app-gmx-bap38.server.lan [172.19.172.108]) (via HTTP); Sat, 10 Dec 2022 22:14:06 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] Fortran: reject bad SIZE argument while simplifying ISHFTC [PR106911] Date: Sat, 10 Dec 2022 22:14:06 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:ChWGdEReVim3doPtbrYhF3J6lyZ9DNEm4vdKiBTsLEcPmJDoO+agem3Tsxk4SHnJN+tVJ jfGiOYN57dbPnmQXCS1WY6e7KDg9gPGDDcCQQbX6As63Fj/oLHawZNMKlLPaxhZ/O1EexEGmjmzn QUCCKeRvCX3geiHjQPHjFENdTRN0LUtUTwp2MsXh7QY6JZfvu4LqXgIoc/BtyDhMOZfgq6IuwRw5 KW+1heXupoc0oDFXob+qkcPO4r4Z9HbeKC6SP8K9Q6FC2yQYhf2ZWghSfx26FHWouh75Qm8Qxv1Q mY= UI-OutboundReport: notjunk:1;M01:P0:yxZ3LynSmDw=;Gcn2TZOi5F6LadiJq2sK4vpEaR6 OwbhNsAKiMUWStFO9y31CXZ8fu/OjtBoanFs7edJNI77OzJQk6DIu6iDVSMxVL8n3vSEi685s LoUOBJXgaEdjujmQVOJGU/2GEu5nBkqA8lHjZoTWFvUwWoYD6k5NjzpyVOH8FRoGh8NSgAec8 /G/9Jn7PiOIPMFPew0NZG3BrDPTihwyL3yTktgFgXhrkJ0gTPOgmhFdrc446+NQHM0SGjvCU3 ukf4KzZu/+7Bl/y44q/wscyKigWRu57q4+Ae8G+t8yxLz2Iqijj5SKy3ZMMVbsVp+XvAbbttV 0GJY+2+K+yqHGEsEdC5on2g3nGdEbpwSYnB/EUocCR7/X3Moc5wFB/JhK3/8swPTSCpctaq6U c3TBaFu3kde4BmLFPTPvc7Ip/yLvnwWs/n25RlW/cXtb6VL7fWudkn+EoA7TFVd+zWOBaFU/u hYBLQM6k5WNbsJotSi6XY0YRGQAGESzYrU7daQd1Ghk73Voj8njJQNrYkjRq5+Cegrp6EjwEs 2y6R3HmgxVyXOws3NLgoZYxZxfAlYpawwWHKWWb1nL0vpmDqyQnF2KmcO+absowiz0S1C3s3m cWu95nSu+/70oIAKiFTyfJK30IPspvFv0yPy2y6hM2xNJl6dIG2cOb5jvLdTzvp6H3nxxRMvn QSgC+UAz/APf2D2lXY+SQMXvuEAL2DnkIyWnK5GLWGVYaBxqk2lalCxjiO4YhJdUfgHJ3Hj0G Z/NjfGd0dP3ZaW8hW4HAa+DfdJoIrff+qz7zw9r/Xm/TeBY4i007KNrBAbTSSxDmm6M0EB6qk vMsfgL1dyELISE+q5PywobYg== X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Harald Anlauf via Gcc-patches From: Harald Anlauf Reply-To: Harald Anlauf Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Dear all, we should not try to simplify ISHFTC if the SIZE argument is known to be outside the allowed range. It's better to generate an error by terminating the simplification. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From ae4438537fbc2ed04f3b0fb32d4e02b0ed6977a1 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Sat, 10 Dec 2022 22:05:15 +0100 Subject: [PATCH] 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. --- gcc/fortran/simplify.cc | 3 +++ gcc/testsuite/gfortran.dg/pr106911.f90 | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/pr106911.f90 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 -- 2.35.3