From patchwork Mon Jan 17 21:58:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 50122 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 597893858416 for ; Mon, 17 Jan 2022 21:59:10 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 597893858416 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1642456750; bh=/akYHEpFQl2Ivxm67cNd5taKgZmZ+fzHsd31U4Qb96c=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=XBKmHpll2eGJgrDxhKzYB5jcNEMBy5RO08OAd5UKkg+p8WJvgzbyIQwrSuMpB3sDD j5b+j2wkMZpUeO1YpwdWM6S6KWs5q0qb4MzmveXeoRwKPf3RgfUoXuRPw+pe+o8XOY 1jfE/EeOx717dQ94OqYuI+xqGbGSgNoZw2EnaDVE= 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 EC56A3858D3C; Mon, 17 Jan 2022 21:58:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC56A3858D3C X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.87.208] ([93.207.87.208]) by web-mail.gmx.net (3c-app-gmx-bap32.server.lan [172.19.172.102]) (via HTTP); Mon, 17 Jan 2022 22:58:37 +0100 MIME-Version: 1.0 Message-ID: To: fortran , gcc-patches Subject: [PATCH] PR fortran/103692 - [11/12 Regression] ICE in add_init_expr_to_sym, at fortran/decl.c:2062 Date: Mon, 17 Jan 2022 22:58:37 +0100 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:W22DtxQ+ZvEUWGKIUPjKe9whZh66MEuNSPHmP0gNQXQndQk1Z1TwJQho1tUF3mg7T1mZ/ rgmeQx3BGcyGhp158STfFA1mrmZIfODYpOX1kVILnl/uzU0sCra3aoycVJcl8lhfSqXQ0UUns3jh o0b4E4uYy1bqEKUJtXHQVYjkPpmRvas6PAEPzoPWrh/4qqUViFQePzLEcqqA3oHPq2yb5i2kRnxa 3kW0XzjsTg3PSq8LloicfwYCpb/ibRaECd4C2bX5zbjDLXXQFjwrP/r4eM/FugsTEbW6y4j3V66j Zw= X-UI-Out-Filterresults: notjunk:1;V03:K0:3bf+jV5Un68=:jToPdNbrbpbNdpTa7scumA njkElBDJj70nDhRp/oJrJ37qjuMuxBiscUX4/JYedpV6gedld7lW0/v/XhMY+AT/cDGRCBGHm iGJRT0UDHjbVsg712I70IenqxmLb6WkGLwXn+eU7gznnn/glX4gJN8GBi8EkQFO4dC/jbLDdh gpayzgDJ1za1rmbwMk8mmyNOSDOVW0SkzhJ/auPw/KZxCOMoXst8sKjmc4xTR4kLRarSxByEl e64kTed9BHfXPEf/bBn8lxC0+0PUcITHvY60z4/DyNGHfWBUn0DPiFs6fmFa/aEwEKxcbyCT4 Pp6wl4QKkSEbNxWMinZ3OqsnH1XZ3fsHIdPnE1//NGHpcWH5qzR6JwRiV1BWXTf+QAAbZg0fQ RrTVEaC+fv7bcJWqcuYX4URTl9txuS17B2JevYKJN5I/hExu2/7ypUab3ro3V/ezpF+OQaTFj e0JXmAfN5Ab3N60V4jcR2NKcnexiWGRYmO45H5+7NmYVM7B+Ueo1rPDypy3WPwQweaoSnni1+ adV8wzxDMnw0/CreoGwD+g2D6QHhO2c1wsX4Li7wkjfN8mm8sc8di927DrKGB3G9EedcZlhTn l7fJ9bPqXV3lF6Eplo6X8Y+dXRlVCQFh0XuYuUSMIOtDw96ciQ1LBo91SqBBOlYSQuCqlbQhm BHCoRiVkJo5Ti0zcgWMxxMBQD5Ug8ikLZjm0abmExeUxN8/MopHGoGJjUV3HH9B+Pz/YHSSOx 0MxVVH9ESBttDZI1VHJZZY1wHW4cQIhGXtl9cwQ+YpW7qARNOAYYbB0V64BnYTwnLX/2sQQg9 Pcj+Yvp X-Spam-Status: No, score=-12.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, FREEMAIL_FROM, GIT_PATCH_0, KAM_NUMSUBJECT, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL, 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 Fortranners, after lengthy debugging of this PR it became obvious that we killed the typespec while trying to expand an empty array constructor. Bad idea, but easy to fix. Regtested on x86_64-pc-linux-gnu. OK for mainline and 11-branch? Thanks, Harald From b9be44b422063c6c1f7a4bb50245ba4051e76136 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Mon, 17 Jan 2022 22:52:08 +0100 Subject: [PATCH] Fortran: handle expansion of zero-sized array constructors gcc/fortran/ChangeLog: PR fortran/103692 * array.c (gfc_expand_constructor): Handle zero-sized array constructors. gcc/testsuite/ChangeLog: PR fortran/103692 * gfortran.dg/pr102520.f90: Adjust error messages. * gfortran.dg/pr103692.f90: New test. --- gcc/fortran/array.c | 3 +++ gcc/testsuite/gfortran.dg/pr102520.f90 | 6 ++---- gcc/testsuite/gfortran.dg/pr103692.f90 | 23 +++++++++++++++++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr103692.f90 diff --git a/gcc/fortran/array.c b/gcc/fortran/array.c index 472304326e8..f1d92e00c98 100644 --- a/gcc/fortran/array.c +++ b/gcc/fortran/array.c @@ -1883,6 +1883,9 @@ gfc_expand_constructor (gfc_expr *e, bool fatal) gfc_expr *f; bool rc; + if (gfc_is_size_zero_array (e)) + return true; + /* If we can successfully get an array element at the max array size then the array is too big to expand, so we just return. */ f = gfc_get_array_element (e, flag_max_array_constructor); diff --git a/gcc/testsuite/gfortran.dg/pr102520.f90 b/gcc/testsuite/gfortran.dg/pr102520.f90 index 1c98c185c17..d2ea8f3a424 100644 --- a/gcc/testsuite/gfortran.dg/pr102520.f90 +++ b/gcc/testsuite/gfortran.dg/pr102520.f90 @@ -5,8 +5,6 @@ program p type t end type type(t), parameter :: a(4) = shape(1) ! { dg-error "Incompatible" } - type(t), parameter :: b(2,2) = reshape(a,[2,2]) ! { dg-error "Incompatible" } - type(t), parameter :: c(2,2) = transpose(b) ! { dg-error "Unclassifiable" } + type(t), parameter :: b(2,2) = reshape(a,[2,2]) ! { dg-error "must be an array" } + type(t), parameter :: c(2,2) = transpose(b) ! { dg-error "must be of rank 2" } end - -! { dg-error "Different shape for array assignment" " " { target *-*-* } 7 } diff --git a/gcc/testsuite/gfortran.dg/pr103692.f90 b/gcc/testsuite/gfortran.dg/pr103692.f90 new file mode 100644 index 00000000000..9687a3cec9d --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr103692.f90 @@ -0,0 +1,23 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! PR fortran/103692 - ICE in expand_constructor +! Contributed by G.Steinmetz + +program p + character(3), parameter :: a(4) = 'abc' + character(*), parameter :: b(*) = (a(2:1)) + character(*), parameter :: y(*) = [(a(2:1))] + character(*), parameter :: u(*) = a(2:1) + character(*), parameter :: v(*) = [a(2:1)] + character(*), parameter :: w(-1) = (a(2:1)) + character(*), parameter :: x(-1) = a(2:1) + character(5), parameter :: c(3,3) = 'def' + character(*), parameter :: d(*) = [(c(2:1,2:))] + character(*), parameter :: e(*,*) = (c(2:1,2:)) + if (len(b) /= 3 .or. size (b) /= 0) stop 1 + if (len(y) /= 3 .or. size (y) /= 0) stop 2 + if (len(d) /= 5 .or. size (d) /= 0) stop 3 + if (len(e) /= 5 .or. any (shape (e) /= [0,2])) stop 4 +end + +! { dg-final { scan-tree-dump-not "_gfortran_stop_numeric" "original" } } -- 2.31.1