From patchwork Tue Nov 16 20:13:04 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 47788 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 36EA1385AC29 for ; Tue, 16 Nov 2021 20:13:53 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 36EA1385AC29 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1637093633; bh=LBc2+YB/5mqUEWIextMd9FcMiL+1GAum234ktqW90Y0=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=sIQDi6q18y0xCAkOTp8keq0ABhQFblcK5ozj6LZJgOJBJgQAnCJslGt9AXJKNKQaD AH2XsVSxlw7YpECbQ72GbRmYrf9821bX8xy92I+dCxPMegr4/POt72eTwsxYenn/o6 rQdOvVIjvW+C6KgDik4KuinnJ/PKYLYtH/glQSzo= 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.22]) by sourceware.org (Postfix) with ESMTPS id 3FB22385781A; Tue, 16 Nov 2021 20:13:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3FB22385781A X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [79.251.8.245] ([79.251.8.245]) by web-mail.gmx.net (3c-app-gmx-bap58.server.lan [172.19.172.128]) (via HTTP); Tue, 16 Nov 2021 21:13:04 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH, committed] PR fortran/103286 - ICE in resolve_select, at fortran/resolve.c:8848 Date: Tue, 16 Nov 2021 21:13:04 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:kK9vbDdXKPj1BTwIyaD0x+L7RdKLvjTIZ1YaCNGbKcXpmtNF9rxvL2KNz7xM0NmIq/7Vp JDDWh0T/FAe4KpAB/N0LHeFXza4vnDduqpUXbL1nPV/Dl9/VC37e5JQ9FuFqlWldryxemIAOK7v0 oxDioqpqYYLSgU45hmhCa7AIViiZNUlHNchscJo3YVdn0y7mDyXByanpzBIDI18lv8EcBZa5leHh v9oH19ETNwBgMcC+/hJzLKTbHQ+m7uqFg5Ad6c8p+7jozvqBQlwa+j/BPHAyVpHCOfzv+Ah1B6r8 zQ= X-UI-Out-Filterresults: notjunk:1;V03:K0:rCuTRbEAU3U=:Aiv6SzjD9xPbd5k5rip/CD uL47HLqD82KLp9VfWU9ASyGR3E5Pklyr9yEe/+H66YL58DjwS6eqxAjrs65ksDfnQWXmaq9EE 0i6iYT73HecIdzkmyJQwXXAJnDELHr4XZfI8ppgFMmVWFIpDCoOAaEU++FRELq97+t3M15jzJ B5QMxkzz/oBIZQ47GSHPtPCsbEkLsSLMbEVuVEB0LIGEV1WbqOCUrN5HVZoy4+AnXSnhSTYZ6 ydL8WkfFfeg1Xd7uh53XrpILzDUxjdjnqVka3vcUZf5UuumcJegKjZLRpdNbri/2JyflL9fPn ZENuYjNIvk3NAwiyXC61b0myQ99qUDOiV27U2YHi8ZoFhNrV1RMNOYghzn7RQ2jU5UV/231BP GO2alE8YHYGQ6ihI4eMAU+4iiJJs+zfmbIvLkEr6vD7utcFOLSW/6S56ZKg6eBTbLmjPRYouW OFxhWDXsa0LwG0TEliOMb+obD6A8RllTVpxSuvK+MPtKuFxaLxXT9V0F0vGMsF9eyUgdwvYGb zQIDfdge9ykXA1wpWTAzzsQsV/EjcsxmbjXWeqPIOkwBFywMGQFNu6NmYLE7H8FqlQxptrcK/ klxhkISH219kD39KaVg2r2g0Y2gN4F8woXx+57KhzBu1MJBreJBY/0JhUzElB86yC5Q5gqXBm +Q2rECFSU4CsOIcKhTXofAeJv9KQUNOcuIU/l/NtBqXRr45UeSjYqICwV8l5HJKFV2N6yZPrH IuSH1KActqtmGBuQdgOYwd4OOR63Or2Hbo4SZB6qDZfMkcjivZZlXVZE/QTRZKV0hBPf+VT66 urkEk3X 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" Committed to mainline as obvious after regtesting. When issuing an error on an invalid range in a SELECT CASE statement with a logical case expression, we need to be careful to use the right locus information. Thanks, Harald From 3b3c9932338650c9a402cf1bfbdf7dfc03e185e7 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 16 Nov 2021 21:06:06 +0100 Subject: [PATCH] Fortran: avoid NULL pointer dereference on invalid range in logical SELECT CASE gcc/fortran/ChangeLog: PR fortran/103286 * resolve.c (resolve_select): Choose appropriate range limit to avoid NULL pointer dereference when generating error message. gcc/testsuite/ChangeLog: PR fortran/103286 * gfortran.dg/pr103286.f90: New test. --- gcc/fortran/resolve.c | 3 ++- gcc/testsuite/gfortran.dg/pr103286.f90 | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/pr103286.f90 diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 705d2326a29..f074a0ab3a1 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -8846,7 +8846,8 @@ resolve_select (gfc_code *code, bool select_type) || cp->low != cp->high)) { gfc_error ("Logical range in CASE statement at %L is not " - "allowed", &cp->low->where); + "allowed", + cp->low ? &cp->low->where : &cp->high->where); t = false; break; } diff --git a/gcc/testsuite/gfortran.dg/pr103286.f90 b/gcc/testsuite/gfortran.dg/pr103286.f90 new file mode 100644 index 00000000000..1c18b7136ce --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103286.f90 @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "std=gnu" } +! PR fortran/103286 - ICE in resolve_select + +program p + select case (.true.) ! { dg-warning "Extension: Conversion" } + case (1_8) + case (:0) ! { dg-error "Logical range in CASE statement" } + case (2:) ! { dg-error "Logical range in CASE statement" } + end select +end -- 2.26.2