From patchwork Wed May 26 21:04:33 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 1484276 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=8.43.85.97; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=gcc.gnu.org header.i=@gcc.gnu.org header.a=rsa-sha256 header.s=default header.b=V/2i6gTm; dkim-atps=neutral Received: from sourceware.org (ip-8-43-85-97.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Fr3Ns2k5Zz9sCD for ; Thu, 27 May 2021 07:04:45 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 0CAC6385DC26; Wed, 26 May 2021 21:04:40 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 0CAC6385DC26 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1622063080; bh=6iYfafeahFVKdROXm2hSQZCHV/rBOw8aY5iejikmjYk=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=V/2i6gTm+ldtY2J9fRrNFQ1dykRiT6+91fokyWlOLXO98j9OzeMrX1ayVusp6LWC/ RGJcKjEXuiVMjNZYWdFB7d0/M7wWZWzjtd9xRl1fFk3y02tMGMoHD9sw1t0uWmsBfR A6aeikDY7LfLXz9HYuai+KaZUimbWGBZrKE0WeS8= 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.15.15]) by sourceware.org (Postfix) with ESMTPS id 88447385803B; Wed, 26 May 2021 21:04:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 88447385803B X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.80.219] ([93.207.80.219]) by web-mail.gmx.net (3c-app-gmx-bs16.server.lan [172.19.170.68]) (via HTTP); Wed, 26 May 2021 23:04:33 +0200 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/100656 - ICE in gfc_conv_expr_present, at fortran/trans-expr.c:1934 Date: Wed, 26 May 2021 23:04:33 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:iM4Vm5B7ss+pxnZuqmtmhG7I4imFpgfl2b3ZPFnRJwnSys//CV4J8i+IRs9Mso5AILys7 eFvd3nT9YwRHmXpmFzF9UR8qkwgVGdTc0Mx0K18pVI1naxt4pRVfEPhDrK05e+r2gJBSdqKX4zeq FRSkvZQsCh8/2p9nhSkSCUC3Vj7DpcvCs419iCX7X8eukA7riS8STmHs7Dvf6yn1z9u78qh0LZZq yGOYHozJk7/535KYhnSEHhGiBIX0NrDtupmQh3oa8DCacV0xoUkkAYEGIaDGg/uNP3FkVtZLy78w 8U= X-UI-Out-Filterresults: notjunk:1;V03:K0:og3GEMivc1I=:2VQWc2Jdq6kGbaZQNIJIsP LGywQi1nXtclLKUKV+R644E0WEaI34XPCCCg7fUO0u378+CEHYce6tGPRzAX679S2KYWzMWmT qdd4ysrn5Dk9RWXO+Ru7ortGPFNOOan2VR/NiGA7bb4jiBASpy/MA89PIWcm1thbC3sFJtGLg 31Pt4Bm6x3wLQe3w0zrPeCBCqc2W2Q1n2dY6uQgCj1LU987c75PgtCQ2TLUFE+84ho4E+A/EB 8dVKAyp+KSxJJhu1DqR7+Cu10AbKukUcfAewayZv40weaOLMF/Zue/fOV0I7YeAbR5aZwWfy1 gOeC0DwzIa5tIJ6d8xnXBIQQuvIXcLPMKZsHx9poW3WZzD7K3hPXn0gldvFwL/SxL/Fg/MuEC zHzgVVOvHXBMrb7ShKDDx3Kpnzl4notJKlLJH75VZLml7OLxvAowk/DV2fWloOqruG+FVRRjf 0r5dUq81QOtWEnZJjF4iVkEQXr2q/HbG969YohzEpyWMoPBVYQHTWTG2JZhxNB1HZ9yFeMCRT G59L2niBjHlP5Cny/exgoE1Q+SLfrEVxUP/zikqnwxaHWWfrcirc/0Wv+We4xp9GdFwqlEtNn FVhC6sbtNdcm9oie6fvKQmOxiGOn46gMYa+I7W0UHPH7LYyUaqGDUEi7U8ez69M6oA5/7z+Uf 6qeRnTwJjCm8P4O8M+kbJfh+fjo6E4aPECub8Gl9JP4epjjTBJYVZwv9GXU8KOKJew2kkAtCM CX8PP09EnJKdJvtQCNDwcCVvZ0rTSMXqsvqbLU5JUPFuCYQoNV8E+oLZ8l6VBJTwyi+hQe1am vsVIHGo2D3dJLieKs+x1dDzX+hjFL2uh4UnnTVf0jsI6a5oHwC0n+Kt0b9WzK/J28wQ1cSrOY 0XK0193Te6H7JFJEcoQlmYYTAa/e4FzLPqOg57hAY8Hx0MXWuTeFqDrlulDxRO X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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@gcc.gnu.org Sender: "Gcc-patches" Dear Fortranners, Gerhard found a case where bounds-checking for an optional, allocatable character dummy resulted in an ICE. We'd better not call the presence check on a non-dummy symbol, as this will hit an assert... Regtested on x86_64-pc-linux-gnu. OK for mainline? And backport to 11? (The code in question has not been touched for nearly 10 years, so I'm expecting this to be safe). Thanks, Harald PR fortran/100656 - prevent ICE in gfc_conv_expr_present gcc/fortran/ChangeLog: PR fortran/100656 * trans-array.c (gfc_conv_ss_startstride): Do not call check for presence of a dummy argument when a symbol actually refers to a non-dummy. gcc/testsuite/ChangeLog: PR fortran/100656 * gfortran.dg/bounds_check_22.f90: New test. diff --git a/gcc/fortran/trans-array.c b/gcc/fortran/trans-array.c index 6d38ea78273..7eeef554c0f 100644 --- a/gcc/fortran/trans-array.c +++ b/gcc/fortran/trans-array.c @@ -4718,8 +4718,9 @@ done: /* For optional arguments, only check bounds if the argument is present. */ - if (expr->symtree->n.sym->attr.optional - || expr->symtree->n.sym->attr.not_always_present) + if ((expr->symtree->n.sym->attr.optional + || expr->symtree->n.sym->attr.not_always_present) + && expr->symtree->n.sym->attr.dummy) tmp = build3_v (COND_EXPR, gfc_conv_expr_present (expr->symtree->n.sym), tmp, build_empty_stmt (input_location)); diff --git a/gcc/testsuite/gfortran.dg/bounds_check_22.f90 b/gcc/testsuite/gfortran.dg/bounds_check_22.f90 new file mode 100644 index 00000000000..a84e3dd4f51 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/bounds_check_22.f90 @@ -0,0 +1,12 @@ +! { dg-do compile } +! { dg-options "-fcheck=bounds" } +! PR fortran/100656 - ICE in gfc_conv_expr_present + +subroutine s(x) + character(:), allocatable, optional :: x(:) + if ( present(x) ) then + if ( allocated(x) ) then + x = 'a' // x // 'e' + end if + end if +end