From patchwork Sun Feb 7 13:34:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Jerry DeLisle X-Patchwork-Id: 1437153 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=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=gcc-patches-bounces@gcc.gnu.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (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 4DYVW268lLz9sBJ for ; Mon, 8 Feb 2021 00:34:21 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D90F83898532; Sun, 7 Feb 2021 13:34:17 +0000 (GMT) X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from impout007.msg.chrl.nc.charter.net (impout007aa.msg.chrl.nc.charter.net [47.43.20.31]) by sourceware.org (Postfix) with ESMTPS id 777463857808; Sun, 7 Feb 2021 13:34:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 777463857808 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=charter.net Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=jvdelisle@charter.net Received: from [192.168.1.9] ([96.41.221.129]) by cmsmtp with ESMTPA id 8kCblQN2Ld7s78kCcljI04; Sun, 07 Feb 2021 13:34:14 +0000 Authentication-Results: charter.net; none X-Authority-Analysis: v=2.3 cv=Db+jVclW c=1 sm=1 tr=0 a=07pILqX15KmGv9ZXTMmBNA==:117 a=07pILqX15KmGv9ZXTMmBNA==:17 a=r77TgQKjGQsHNAKrUKIA:9 a=mDV3o1hIAAAA:8 a=O7A_1_-CcfinQ2XAh0cA:9 a=QEXdDO2ut3YA:10 a=v_XbUBYvp8fFCOv3RrYA:9 a=De_Ol2h6w80A:10 a=_FVE-zBwftR9WsbkzFJk:22 a=Z5ABNNGmrOfJ6cZ5bIyy:22 a=jd6J4Gguk5HxikPWLKER:22 To: gfortran From: Jerry DeLisle Subject: [patch, libgfortran] PR98825 Unexpected behavior of FORTRAN FORMAT expressions when suppressing new line with '$' Message-ID: Date: Sun, 7 Feb 2021 05:34:13 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.7.0 MIME-Version: 1.0 Content-Language: en-US X-CMAE-Envelope: MS4wfH7QZhIElFtA72yYKcPLwesmDEWHhbXUOnOYKe4nLVB9NIZdxpRUrjke4k5FvfIfIRut2K4BEuJW0TqwJkfNqWxOjmdLnnczKLKYiIdzk++1ZBtXKqOv +CYBmHmaUK/1GpXUwFDsQ7U/n6y+o5Cj1bFHj+NWLuWprL6FIxicGXlT6l+zKndVMWaNVh9WgtH19FRJ03mQXtSfzU/yPZQw9u4= X-Spam-Status: No, score=-8.6 required=5.0 tests=BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, KAM_DMARC_STATUS, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, 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: , Cc: gcc-patches Errors-To: gcc-patches-bounces@gcc.gnu.org Sender: "Gcc-patches" Hello all, Attached patch fixes this and adds a test case. The "$" edit descriptor was being completely ignored when next_record_w is processed. Fixed by adding a simple check. OK for trunk and backport to 10 since it is simple enough? Regards, Jerry libgfortran: Do not emit end-of-record if seen_dollar. 2021-02-07  Jerry DeLisle  libgfortran/ChangeLog:     PR libgfortran/98825     * io/transfer.c (next_record_w): Insert check for seen_dollar and if     so, skip issueing next record. gcc/testsuite/ChangeLog:     * gfortran.dg/dollar_edit_descriptor_4.f: New test. diff --git a/gcc/testsuite/gfortran.dg/dollar_edit_descriptor_4.f b/gcc/testsuite/gfortran.dg/dollar_edit_descriptor_4.f new file mode 100644 index 00000000000..c8453ce6bc8 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/dollar_edit_descriptor_4.f @@ -0,0 +1,16 @@ +! { dg-do run } +! { dg-options "-std=gnu" } +! PR98825 Test for fix of '$' edit descriptor. + character(30) :: line + 10 format (i3,$) + + open(10, status='scratch') + write (10,10) 1 + write (10,10) 2,3,4,5 +! Check the result. + line = 'abcdefg' + rewind(10) + read(10, '(a)') line + close(10) + if (line .ne. ' 1 2 3 4 5') call abort + end diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 8ab0583dd55..27bee9d4e01 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -4020,6 +4020,8 @@ next_record_w (st_parameter_dt *dtp, int done) } } } + else if (dtp->u.p.seen_dollar == 1) + break; /* Handle legacy CARRIAGECONTROL line endings. */ else if (dtp->u.p.current_unit->flags.cc == CC_FORTRAN) next_record_cc (dtp);