From patchwork Mon Dec 6 22:19:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 48563 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 464CB3858422 for ; Mon, 6 Dec 2021 22:20:08 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 464CB3858422 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1638829208; bh=GyVMP04c1/TpxdFhgrG4Eyb+JyopvR/IR8G+ZmTgmnc=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=K43DbMvajMW1H2F/zW5LbEnfMH38osjvTtDoNIyQG+TBywvX5UJV60upPqlHhbBHS Kg4z2DtcxdUDwsO2l08WVR5KNo4Z2NhutrUlfv4qw0mf6ui9At/G71RSYX0RhV0lKD ptp7p+eZOSq3TeBWgpT7dYV/cM6rnS8yb2e4eSrI= 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 E10813858430; Mon, 6 Dec 2021 22:19:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E10813858430 X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.86.118] ([93.207.86.118]) by web-mail.gmx.net (3c-app-gmx-bap31.server.lan [172.19.172.101]) (via HTTP); Mon, 6 Dec 2021 23:19:36 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/103591 - ICE in gfc_compare_string, at fortran/arith.c:1119 Date: Mon, 6 Dec 2021 23:19:36 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:F542ozBSagKO9XgYB4m/YiT99JRZT9K6J00sdEHLSnfPml8w301Nmo0AlRATdpYJSTyeI AN1xri5+Ki0bqkZM5auwuZ2Ps925WdiRYAdYKapznBxVwy0B0R3zE1S6BhwCNnteE5QduQlQTZgy hjw3z8NDNbI6SqaUemcwISC9JgbAv5UpZWCCWvRBoHOw/txNiM+zTD+stMYz/7h/+B61ZiujBQRR IxuPli3JGKoGW6LNjP9T00OF/jNVDnUKM5ax+zQf0raRqnDtSbzmGqeUv4Gfym4edJ1tzmDphmkM fw= X-UI-Out-Filterresults: notjunk:1;V03:K0:llaxMSJLugQ=:sHPEZkR0kWViXSfihuJ6d5 rjeyvJ3fprFwY4aHkk1gzW13Jq0vI9k2HqJET7i+xsU/kynBk1l4vFklaqu+J60AAxITDvjCv cxKBEucrw8s/kvAuRGqIWfe6I1QA5HmSjUxEdH8bBj4VZUJw63vtG2JuT3EBw7CF0xR5a8LDz oVVTJwqI7sc2243Ib1qCC7G6v/YauEV7ZUR/ZukSHdIwC1ikAH92dpQrGdOrkRjZ/C/dK/cKb fhOm3qENpvuphldDaltEx8LSInQ9yp8mteo1T98ZtJvN0VawvRJlDtfzB9ICdg0BC7YJ5OK9y mdng2Q24l9uJ0dmuEVYmp5XDDChByIqSpZh519DnxjOckGsG7QigkT4ZaEBxlvGUhzma1EztQ hPeu9xtWy1J1PtQ9+vajVnxUitJKIcqD0Wd+T6cJ26zN15XSY+MI1VWlj3Rzg1NWzR+9T7jod a4Pg0YBecVd5XhUlhCVJDvrOUVefha6dEvyFIfAn1gUdBbq0FVo4aIdp1q6ywp9reFBiRY6ZY AgSzgqbBpw9oUrEwSSXop2YPqHq/3SlyilcqXhwdwA/ZN36IYz2cgrrQrO8MTYrX60sQymHPX bTbs2/QX8y1PiECRa04ArVjtTBpT9efltTN5BThrtt1V/uhdkX4LTXX2SLSiz/PyfBSVKYpmK GM+K1ZjeqLz6B+u0rqDLMT5qebcaP/3Yb80ztlp47DRETNNl42F29OiLUCgEzBTcHvW7yJsgp IZAFMLYocoC0M5g8vo09VuZd3RDDlQw3iQcFfelqrLRhn9z0A40hrR60y5NNwpc+VCz08Wd5q myGeEWC X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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 didn't check the type of the upper bound in a case range. Bummer. Simply add a corresponding check. Regtested on x86_64-pc-linux-gnu. OK for mainline? Thanks, Harald From b4e7aeae4f6c59d8fe950d7981832e3f9c6a8f0e Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 6 Dec 2021 23:15:11 +0100 Subject: [PATCH] Fortran: add check for type of upper bound in case range gcc/fortran/ChangeLog: PR fortran/103591 * match.c (match_case_selector): Check type of upper bound in case range. gcc/testsuite/ChangeLog: PR fortran/103591 * gfortran.dg/select_9.f90: New test. --- gcc/fortran/match.c | 9 +++++++++ gcc/testsuite/gfortran.dg/select_9.f90 | 10 ++++++++++ 2 files changed, 19 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/select_9.f90 diff --git a/gcc/fortran/match.c b/gcc/fortran/match.c index 2bf21434a42..52bc5af7542 100644 --- a/gcc/fortran/match.c +++ b/gcc/fortran/match.c @@ -6075,6 +6075,15 @@ match_case_selector (gfc_case **cp) m = gfc_match_init_expr (&c->high); if (m == MATCH_ERROR) goto cleanup; + if (m == MATCH_YES + && c->high->ts.type != BT_LOGICAL + && c->high->ts.type != BT_INTEGER + && c->high->ts.type != BT_CHARACTER) + { + gfc_error ("Expression in CASE selector at %L cannot be %s", + &c->high->where, gfc_typename (c->high)); + goto cleanup; + } /* MATCH_NO is fine. It's OK if nothing is there! */ } } diff --git a/gcc/testsuite/gfortran.dg/select_9.f90 b/gcc/testsuite/gfortran.dg/select_9.f90 new file mode 100644 index 00000000000..c580e8162bd --- /dev/null +++ b/gcc/testsuite/gfortran.dg/select_9.f90 @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/103591 - ICE in gfc_compare_string +! Contributed by G.Steinmetz + +program p + integer :: n + select case (n) + case ('1':2.) ! { dg-error "cannot be REAL" } + end select +end -- 2.26.2