From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by sourceware.org (Postfix) with ESMTPS id 10F823858C52; Tue, 27 Sep 2022 19:05:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 10F823858C52 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1664305529; bh=PiXwdEvEYAdIXCPRZVvFTPQ/u0PBz6F4jsOEkv53D1Y=; h=X-UI-Sender-Class:From:To:Subject:Date; b=UOXhdItg7kxJ2dD0OhY1LoxNiVhkSik+FyUyR1qBDM4LlcKTMPBH5b484EBZ80MxK o6iLqXHuh70v1rYvxSuQCsgtyk3sjONMw8QgC6wQGi/jO/zSbA/9RGLU0guyVa0M2o mCtLBGRW9G1LCEY8x/ypGtqf3650pWIfpjOHeB/I= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from [93.207.82.123] ([93.207.82.123]) by web-mail.gmx.net (3c-app-gmx-bap61.server.lan [172.19.172.131]) (via HTTP); Tue, 27 Sep 2022 21:05:29 +0200 MIME-Version: 1.0 Message-ID: From: Harald Anlauf To: fortran , gcc-patches Subject: [PATCH] Fortran: error recovery while simplifying intrinsic UNPACK [PR107054] Content-Type: multipart/mixed; boundary=trekuen-f08a7c2c-11df-4303-a842-d4b6ea541b88 Date: Tue, 27 Sep 2022 21:05:29 +0200 Importance: normal Sensitivity: Normal X-Priority: 3 X-Provags-ID: V03:K1:yhoz9UBoQjzxNbzH16PkkF70RTD5gHJh6wrAEGpBF7VfF7dj3Ldtnb5kfs/l0aekMM29m WZh8lChHejyioc5ErIZvdSlri1iZUDmalwSV5I6GuyRZ6WBYNoflTB3mL9HG7ZcQVvuoJqOW7jpj 9scPrzfSWyTI4jWdaCnFLc8iqI7/1qS+vAA8F9rSLGQ9xmnOrfJGUeLs20TpZAlfKsYuk6FlGs0O QC+dwGCbHU1ltnl7D32zPfeQjNUqzNQVj0nbI/EGqDngpPqrsoCw8k0eaTJ9QsRhaoMKnz7pmkBZ zQ= X-UI-Out-Filterresults: notjunk:1;V03:K0:1cQ3/31xso8=:4f2FWv8RvqgpEREur73nCK 1ewrtmHG2gM36dUl4MAKFmE+exdKQK9+KMo4jAxCUNksPDHvfeoBvhc0mPZZ9luGfJiTeYyoI aMYsBlEYDCzgdsJsRRIM2uneDP/SweKMywIvYboPPCZP6FoxDPNRUeieIOvqLT7tzRKVpEwjd KVgXWc4vw1eciULN/fy2YXB/lTlFEt1IbvZN4TcnkZ3IzHQTeoAO1Jofmeox7XLyYNMYjLSTg OL0k9ZT1UvyQwq/kwc4vaiqvZ7bDLb49xU4DoYuduabER2aL6Z/PVmJJzu4w7n/G1qyC2Jqet bJ/1gKu/DFCG0v3duf/T+BR4bIT9nJIs7W5gfERRobrOwyUXDUC66766EtgD5rzpXwKC+v/c5 Lt2h/lLPQ5v+SMB0ZifCJ2hzZ0ECGKfjEkhkrBREFH7Ya4HmXkqrwWM9XPIeCf/ADidN1wwif RPPUXeBDbxjTKialPTEJF1LTYU/YJQoz0Vr8d3uLi44kcO79f1XxSi8XlBYvOYf9UX9vhJAI2 VfI5BElocTLBCWctWw2cbnHij3++80a+X/b/Gt8Oq+KrnSwwRGjcsnDnQRcOqPE3ShUdEZ7mb +BZ1pXxIR1XofxyYKDZZtzMpTPVDbqIomcKXvaj+lIOzmLFILFA2kzB3t6Sahr8+A4rcZ2qBY i8JhE/STy3zyT2sFN3q/yzLd9lJJvFzeWZWCxrRsfqI/Vi+qsEDb1F4coDZZ8EhtpnhEriRkB YhkDbuXtnb2E+RJVzyx31j/LFSJiapI8w7bKknajymLERG1Dm77qcZ8da2llYojLI9L5CG6Id ya9RVXs X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_BL,RCVD_IN_MSPIKE_H2,RCVD_IN_MSPIKE_ZBI,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 List-Id: --trekuen-f08a7c2c-11df-4303-a842-d4b6ea541b88 Content-Type: text/plain; charset=UTF-8 Dear all, invalid input may trigger an assert while trying to simplify an expression involving the intrinsic UNPACK and when the constructor is lacking sufficient valid elements. The obvious solution is to replace the assert by a condition that terminates simplification in that case. Report and testcase by Gerhard. Regtested on x86_64-pc-linux-gnu. OK for mainline? This is a 10/11/12/13 regression and shall be backported. Thanks, Harald --trekuen-f08a7c2c-11df-4303-a842-d4b6ea541b88 Content-Type: text/x-patch Content-Disposition: attachment; filename=pr107054.diff Content-Transfer-Encoding: quoted-printable =46rom 80285cdad1fe98c52ebf38f9f66070b2a50191c6 Mon Sep 17 00:00:00 2001 From: Harald Anlauf Date: Tue, 27 Sep 2022 20:54:28 +0200 Subject: [PATCH] Fortran: error recovery while simplifying intrinsic UNPAC= K [PR107054] gcc/fortran/ChangeLog: PR fortran/107054 * simplify.cc (gfc_simplify_unpack): Replace assert by condition that terminates simplification when there are not enough elements in the constructor of argument VECTOR. gcc/testsuite/ChangeLog: PR fortran/107054 * gfortran.dg/pr107054.f90: New test. =2D-- gcc/fortran/simplify.cc | 13 ++++++++++--- gcc/testsuite/gfortran.dg/pr107054.f90 | 13 +++++++++++++ 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr107054.f90 diff --git a/gcc/fortran/simplify.cc b/gcc/fortran/simplify.cc index c0fbd0ed7c2..6ac92cf9db8 100644 =2D-- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -8458,9 +8458,16 @@ gfc_simplify_unpack (gfc_expr *vector, gfc_expr *ma= sk, gfc_expr *field) { if (mask_ctor->expr->value.logical) { - gcc_assert (vector_ctor); - e =3D gfc_copy_expr (vector_ctor->expr); - vector_ctor =3D gfc_constructor_next (vector_ctor); + if (vector_ctor) + { + e =3D gfc_copy_expr (vector_ctor->expr); + vector_ctor =3D gfc_constructor_next (vector_ctor); + } + else + { + gfc_free_expr (result); + return NULL; + } } else if (field->expr_type =3D=3D EXPR_ARRAY) e =3D gfc_copy_expr (field_ctor->expr); diff --git a/gcc/testsuite/gfortran.dg/pr107054.f90 b/gcc/testsuite/gfortr= an.dg/pr107054.f90 new file mode 100644 index 00000000000..bbfe646beba =2D-- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr107054.f90 @@ -0,0 +1,13 @@ +! { dg-do compile } +! PR fortran/107054 - ICE in gfc_simplify_unpack +! Contributed by G.Steinmetz + +program p + type t + integer :: n =3D 0 + end type + type(t), parameter :: a(4) =3D t(2) + type(t), parameter :: b(4) =3D reshape(a,[2]) ! { dg-error "Different s= hape" } + type(t), parameter :: c(2) =3D pack(b,[.false.,.true.,.false.,.true.]) = ! { dg-error "Different shape" } + type(t), parameter :: d(4) =3D unpack(c,[.false.,.true.,.false.,.true.]= ,a) +end =2D- 2.35.3 --trekuen-f08a7c2c-11df-4303-a842-d4b6ea541b88--