From patchwork Mon Oct 24 11:53:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerry DeLisle X-Patchwork-Id: 78932 Delivered-To: patch@linaro.org Received: by 10.140.97.247 with SMTP id m110csp2533860qge; Mon, 24 Oct 2016 04:53:45 -0700 (PDT) X-Received: by 10.99.216.21 with SMTP id b21mr23354123pgh.110.1477310025386; Mon, 24 Oct 2016 04:53:45 -0700 (PDT) Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id l2si11285751pga.245.2016.10.24.04.53.45 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 24 Oct 2016 04:53:45 -0700 (PDT) Received-SPF: pass (google.com: domain of gcc-patches-return-439384-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org; spf=pass (google.com: domain of gcc-patches-return-439384-patch=linaro.org@gcc.gnu.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=gcc-patches-return-439384-patch=linaro.org@gcc.gnu.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; q=dns; s=default; b=W+8xu5O3BiqaVVlBm I1EGna71P0CR5sadA1rxPW+FFIdes8ok+GgsGknPhKuguSnJcyfvvrEz+Y03S8jJ cuSYCDuqsCsZxvTlv+gB0xQoYU5ROIz5StF20HhUsPIE7tXJx4yxLISC9d5OECYL ZpNmCfi1sizhsoWZe8uG+yz6rA= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=gcc.gnu.org; h=list-id :list-unsubscribe:list-archive:list-post:list-help:sender :subject:to:references:cc:from:message-id:date:mime-version :in-reply-to:content-type; s=default; bh=RfrF+a9zsK1ZuHs+dpPThD0 PRtw=; b=MnB32kWg2ywNarcxIlEHpicbcW6VcaZKd4OLzc14A3eJ9lMBkenZ1cE 4AifldIhDIoSLqupgqfIvVSPM1zco7BFT2MbpnOzCLJ1bVVCd+28WyEWHV/6ifqB CWSpB9tBzPjh4e9vWf6tMj5aDrH5+zEsF2x93yjdAr2DndyJCQZA= Received: (qmail 88252 invoked by alias); 24 Oct 2016 11:53:28 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Received: (qmail 88213 invoked by uid 89); 24 Oct 2016 11:53:27 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=AGE, 1016, automake, power8 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mtaout006-public.msg.strl.va.charter.net Received: from mtaout006-public.msg.strl.va.charter.net (HELO mtaout006-public.msg.strl.va.charter.net) (68.114.190.31) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 24 Oct 2016 11:53:17 +0000 Received: from impout001 ([68.114.189.16]) by mtaout006.msg.strl.va.charter.net (InterMail vM.9.00.023.01 201-2473-194) with ESMTP id <20161024115315.UAKP7358.mtaout006.msg.strl.va.charter.net@impout001>; Mon, 24 Oct 2016 06:53:15 -0500 Received: from amda8.localdomain ([96.41.215.23]) by impout001 with charter.net id zPtE1t0080Wrkg001PtEwm; Mon, 24 Oct 2016 06:53:15 -0500 X-Authority-Analysis: v=2.1 cv=EKqI0jpC c=1 sm=1 tr=0 a=salB9WdMPIDduBH7JsZfrA==:117 a=salB9WdMPIDduBH7JsZfrA==:17 a=L9H7d07YOLsA:10 a=9cW_t1CCXrUA:10 a=s5jvgZ67dGcA:10 a=r77TgQKjGQsHNAKrUKIA:9 a=mDV3o1hIAAAA:8 a=gZxyJa0APuTL_RtToyMA:9 a=QEXdDO2ut3YA:10 a=7M5n0iw_GOPFNT93jkwA:9 a=UebQzsCZvN5B8C03:21 a=gmsV7AFex0gXXq5G:21 a=_FVE-zBwftR9WsbkzFJk:22 X-Auth-id: anZkZWxpc2xlQGNoYXJ0ZXIubmV0 Subject: Re: [patch, fortran] PR77828 Linking gfortran-7 compiled program with libgfortran of 5.x allowed but crashes To: "fortran@gcc.gnu.org" References: <5b9b6674-bad2-2db6-074d-62e6287001f4@charter.net> Cc: GCC Patches From: Jerry DeLisle Message-ID: <14506deb-5f40-e27f-c871-ac4929467872@charter.net> Date: Mon, 24 Oct 2016 04:53:13 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <5b9b6674-bad2-2db6-074d-62e6287001f4@charter.net> On 10/18/2016 04:48 PM, Jerry DeLisle wrote: > Hi Folks, > > The attached patch does some minor cleanup and bumps the libgfortran version > number. I have wanted to reorder the dtp structure for many years now. Not > strictly needed but it has bugged me forever. > > The bump is needed because of the significant changes from implementation of DTIO. > --- snip --- Revised patch. Changed a single byte char to int for better memory alignment on 32 bit boundaries. Regression tested on x86-64-linux, FreeBSD, and Power8. I plan to commit this to trunk sometime today. > > Regression tested on x86-64-linux. > > OK for trunk? > > Regards, > > Jerry > > 2016-10-18 Jerry DeLisle > > PR fortran/77828 > * io/io.h (st_parameter_dt): Reorder for readability and sanity. > * io/transfer.c (data_transfer_init): Remove TODO and enable the > runtime error message, rec= specifier not allowed in STREAM > access. > * libtool-version: Bump major version of libgfortran to 4. > > 2016-10-18 Jerry DeLisle > > PR fortran/77828 > * ioparm.def: Reorder dt parameters to match libgfortran. > > > diff --git a/gcc/fortran/ioparm.def b/gcc/fortran/ioparm.def index 17b7ac7..bd628ce 100644 --- a/gcc/fortran/ioparm.def +++ b/gcc/fortran/ioparm.def @@ -90,11 +90,9 @@ IOPARM (inquire, id, 1 << 7, pint4) IOPARM (inquire, iqstream, 1 << 8, char1) IOPARM (wait, common, 0, common) IOPARM (wait, id, 1 << 7, pint4) -#ifndef IOPARM_dt_list_format +IOPARM (dt, common, 0, common) #define IOPARM_dt_list_format (1 << 7) #define IOPARM_dt_namelist_read_mode (1 << 8) -#endif -IOPARM (dt, common, 0, common) IOPARM (dt, rec, 1 << 9, intio) IOPARM (dt, size, 1 << 10, pintio) IOPARM (dt, iolength, 1 << 11, pintio) @@ -103,7 +101,6 @@ IOPARM (dt, format, 1 << 12, char1) IOPARM (dt, advance, 1 << 13, char2) IOPARM (dt, internal_unit, 1 << 14, char1) IOPARM (dt, namelist_name, 1 << 15, char2) -IOPARM (dt, u, 0, pad) IOPARM (dt, id, 1 << 16, pint4) IOPARM (dt, pos, 1 << 17, intio) IOPARM (dt, asynchronous, 1 << 18, char1) @@ -115,3 +112,4 @@ IOPARM (dt, round, 1 << 23, char2) IOPARM (dt, sign, 1 << 24, char1) #define IOPARM_dt_f2003 (1 << 25) #define IOPARM_dt_dtio (1 << 26) +IOPARM (dt, u, 0, pad) diff --git a/gcc/testsuite/gfortran.dg/streamio_17.f90 b/gcc/testsuite/gfortran.dg/streamio_17.f90 new file mode 100644 index 0000000..41fa0b9 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/streamio_17.f90 @@ -0,0 +1,12 @@ +! { dg-do run } +program stream_test +implicit none +integer :: ios +character(128) :: message +open(10, status='scratch', access='stream') +write (10, rec=1, iostat=ios, iomsg=message) "This is a test" ! +if (ios.ne.5001) call abort +if (message.ne. & + &"Record number not allowed for stream access data transfer") & + call abort +end program diff --git a/libgfortran/io/io.h b/libgfortran/io/io.h index 8b20389..8c6caef 100644 --- a/libgfortran/io/io.h +++ b/libgfortran/io/io.h @@ -424,6 +424,15 @@ typedef struct st_parameter_dt CHARACTER2 (advance); CHARACTER1 (internal_unit); CHARACTER2 (namelist_name); + GFC_INTEGER_4 *id; + GFC_IO_INT pos; + CHARACTER1 (asynchronous); + CHARACTER2 (blank); + CHARACTER1 (decimal); + CHARACTER2 (delim); + CHARACTER1 (pad); + CHARACTER2 (round); + CHARACTER1 (sign); /* Private part of the structure. The compiler just needs to reserve enough space. */ union @@ -440,7 +449,8 @@ typedef struct st_parameter_dt unit_blank blank_status; unit_sign sign_status; int scale_factor; - int max_pos; /* Maximum righthand column written to. */ + /* Maximum righthand column written to. */ + int max_pos; /* Number of skips + spaces to be done for T and X-editing. */ int skips; /* Number of spaces to be done for T and X-editing. */ @@ -494,8 +504,7 @@ typedef struct st_parameter_dt are an unsigned char, EOF, or EOF - 1 used to mark the field as not valid. */ int last_char; /* No longer used, moved to gfc_unit. */ - char nml_delim; - + int nml_delim; int repeat_count; int saved_length; int saved_used; @@ -523,15 +532,6 @@ typedef struct st_parameter_dt must be smaller or equal to this array. */ char pad[16 * sizeof (char *) + 32 * sizeof (int)]; } u; - GFC_INTEGER_4 *id; - GFC_IO_INT pos; - CHARACTER1 (asynchronous); - CHARACTER2 (blank); - CHARACTER1 (decimal); - CHARACTER2 (delim); - CHARACTER1 (pad); - CHARACTER2 (round); - CHARACTER1 (sign); } st_parameter_dt; diff --git a/libgfortran/io/transfer.c b/libgfortran/io/transfer.c index 0879ca7..e3f75b6 100644 --- a/libgfortran/io/transfer.c +++ b/libgfortran/io/transfer.c @@ -3026,20 +3026,13 @@ data_transfer_init (st_parameter_dt *dtp, int read_flag) return; } - /* TODO: This is required to maintain compatibility between - 4.3 and 4.4 runtime. Remove when ABI changes from 4.3 */ - - if (is_stream_io (dtp)) - dtp->u.p.current_unit->strm_pos = dtp->rec; - - /* TODO: Un-comment this code when ABI changes from 4.3. if (dtp->u.p.current_unit->flags.access == ACCESS_STREAM) { generate_error (&dtp->common, LIBERROR_OPTION_CONFLICT, "Record number not allowed for stream access " "data transfer"); return; - } */ + } } /* Bugware for badly written mixed C-Fortran I/O. */ diff --git a/libgfortran/libtool-version b/libgfortran/libtool-version index f787e37..7121990 100644 --- a/libgfortran/libtool-version +++ b/libgfortran/libtool-version @@ -3,4 +3,4 @@ # This is a separate file so that version updates don't involve re-running # automake. # CURRENT:REVISION:AGE -3:0:0 +4:0:0