public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "john.harper at vuw dot ac.nz" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/107874] merge not using all its arguments
Date: Fri, 02 Dec 2022 20:50:07 +0000	[thread overview]
Message-ID: <bug-107874-4-ss8lHlAbbH@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-107874-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107874

--- Comment #18 from john.harper at vuw dot ac.nz ---
An interesting problem! But I thought my original test case did not have 
recursive I/O because tstuff and fstuff each print something in the 
statement
    y = merge(tstuff(),fstuff(),x(i))
but y itself is printed only in the next statement,
    print *,y

Or does evaluating merge allow each of tstuff and fstuff to be evaluated
at the same time? I was thinking of tstuff and fstuff being evaluated
in succession but could there be systems in which they are evaluated 
simultaneously? If so, whether the program is valid Fortran depends on the
kind of system on which it is being executed.

John Harper

On Fri, 2 Dec 2022, anlauf at gcc dot gnu.org wrote:

> Date: Fri, 2 Dec 2022 20:22:23 +0000
> From: anlauf at gcc dot gnu.org <gcc-bugzilla@gcc.gnu.org>
> To: John Harper <john.harper@vuw.ac.nz>
> Subject: [Bug fortran/107874] merge not using all its arguments
> Resent-Date: Sat, 3 Dec 2022 09:22:36 +1300 (NZDT)
> Resent-From: <john.harper@vuw.ac.nz>
> 
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=107874
>
> --- Comment #17 from anlauf at gcc dot gnu.org ---
> (In reply to Jerry DeLisle from comment #16)
>> (In reply to anlauf from comment #15)
>> --- snip ---
>>> Can you please verify?
>>
>> Yes, this fixes the test case.
>
> OK, thanks for confirming.
>
>> However if the orginal test case is valid
>> fortran we probably need to fix something else. Paul Thomas was noticing a
>> similar problem with his Finalization patches.  He was doing the
>> finalization inside trans_transfer or similar so it was blocking on a mutex
>> trying to finalize in the middle of an I/O operation.
>>
>> So in this case, my guess is the merge expression needs to be resolved
>> before the translation phase.
>
> If I interprete the tree-dump correctly, we have e.g.:
>
>          _gfortran_st_write (&dt_parm.2);
>          {
>            logical(kind=4) D.4279;
>            logical(kind=4) D.4280;
>            logical(kind=4) D.4281;
>            logical(kind=4) D.4282;
>
>            D.4279 = tstuff ();
>            D.4280 = fstuff ();
>            D.4281 = x[(integer(kind=8)) i + -1];
>            D.4282 = D.4281 ? D.4279 : D.4280;
>            _gfortran_transfer_logical_write (&dt_parm.2, &D.4282, 4);
>          }
>          _gfortran_st_write_done (&dt_parm.2);
>
> so we start the write, then evaluate the merge(), which is tstuff()/fstuff(),
> and which does its own I/O, and then return to continue with the transfer.
>
> So this might be non-conforming code, see
>
> F2018:12.12 Restrictions on input/output statements
>
> (2) An input/output statement that is executed while another input/output
> statement is being executed is a recursive input/output statement.
> A recursive input/output statement shall not identify an external unit that
> is identified by another input/output statement being executed except that
> a child data transfer statement may identify its parent data transfer
> statement external unit.
>
> I am not sure I fully understand the last sentence in this paragraph,
> but I think the pushed testcase might be invalid and should be replaced.
>
> If you agree, I'll simply do this.
>
> -- 
> You are receiving this mail because:
> You reported the bug.
>


-- John Harper, School of Mathematics and Statistics
Victoria Univ. of Wellington, PO Box 600, Wellington 6140, New Zealand.
e-mail john.harper@vuw.ac.nz phone +64(0) 4 463 5276

  parent reply	other threads:[~2022-12-02 20:50 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-26  4:57 [Bug fortran/107874] New: " john.harper at vuw dot ac.nz
2022-11-26 20:30 ` [Bug fortran/107874] " anlauf at gcc dot gnu.org
2022-11-27  1:03 ` kargl at gcc dot gnu.org
2022-11-27 20:00 ` anlauf at gcc dot gnu.org
2022-11-27 21:07 ` anlauf at gcc dot gnu.org
2022-11-27 21:24 ` sgk at troutmask dot apl.washington.edu
2022-11-28 20:07 ` anlauf at gcc dot gnu.org
2022-11-29 18:19 ` cvs-commit at gcc dot gnu.org
2022-12-01 20:28 ` anlauf at gcc dot gnu.org
2022-12-01 21:36 ` jvdelisle2 at gmail dot com
2022-12-01 21:55 ` anlauf at gcc dot gnu.org
2022-12-01 22:17 ` anlauf at gcc dot gnu.org
2022-12-01 23:46 ` jvdelisle at gcc dot gnu.org
2022-12-01 23:54 ` jvdelisle at gcc dot gnu.org
2022-12-02  0:34 ` jvdelisle at gcc dot gnu.org
2022-12-02 17:48 ` anlauf at gcc dot gnu.org
2022-12-02 19:44 ` jvdelisle at gcc dot gnu.org
2022-12-02 20:22 ` anlauf at gcc dot gnu.org
2022-12-02 20:50 ` john.harper at vuw dot ac.nz [this message]
2022-12-02 21:05 ` anlauf at gcc dot gnu.org
2022-12-02 21:26 ` anlauf at gcc dot gnu.org
2022-12-02 21:27 ` john.harper at vuw dot ac.nz
2022-12-02 21:35 ` cvs-commit at gcc dot gnu.org
2022-12-02 21:42 ` jvdelisle at gcc dot gnu.org
2022-12-07 21:22 ` anlauf at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-107874-4-ss8lHlAbbH@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).