From patchwork Tue Sep 27 19:05:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Harald Anlauf X-Patchwork-Id: 58088 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 BC2CC385800D for ; Tue, 27 Sep 2022 19:06:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org BC2CC385800D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1664305565; bh=EI5dJ34M/UJxFLNVFWhCG91LbDqHos0lRLqI5JgrCkA=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=G5JXl+T6lypWih7lIVIaQN6YQI1vu31ObHivbLuXGjVPKAkKWT3Y3wG9X2LH6GxOG M8oZGKw6F1AxbU8CugTkByP9MUyh6pua4ZmKhtloGJJWXIMKplNT/9PAAqybGPr5c+ yxiGxZM5kyk9UvTyhpDksEi9hx0MTSxipbiq/qZo= 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.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 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: To: fortran , gcc-patches Subject: [PATCH] Fortran: error recovery while simplifying intrinsic UNPACK [PR107054] 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 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, 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 From 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 UNPACK [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. --- 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 --- a/gcc/fortran/simplify.cc +++ b/gcc/fortran/simplify.cc @@ -8458,9 +8458,16 @@ gfc_simplify_unpack (gfc_expr *vector, gfc_expr *mask, gfc_expr *field) { if (mask_ctor->expr->value.logical) { - gcc_assert (vector_ctor); - e = gfc_copy_expr (vector_ctor->expr); - vector_ctor = gfc_constructor_next (vector_ctor); + if (vector_ctor) + { + e = gfc_copy_expr (vector_ctor->expr); + vector_ctor = gfc_constructor_next (vector_ctor); + } + else + { + gfc_free_expr (result); + return NULL; + } } else if (field->expr_type == EXPR_ARRAY) e = gfc_copy_expr (field_ctor->expr); diff --git a/gcc/testsuite/gfortran.dg/pr107054.f90 b/gcc/testsuite/gfortran.dg/pr107054.f90 new file mode 100644 index 00000000000..bbfe646beba --- /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 = 0 + end type + type(t), parameter :: a(4) = t(2) + type(t), parameter :: b(4) = reshape(a,[2]) ! { dg-error "Different shape" } + type(t), parameter :: c(2) = pack(b,[.false.,.true.,.false.,.true.]) ! { dg-error "Different shape" } + type(t), parameter :: d(4) = unpack(c,[.false.,.true.,.false.,.true.],a) +end -- 2.35.3