public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming
@ 2014-08-28 19:19 anlauf at gmx dot de
  2014-08-31 21:08 ` [Bug libfortran/62296] " anlauf at gmx dot de
                   ` (7 more replies)
  0 siblings, 8 replies; 9+ messages in thread
From: anlauf at gmx dot de @ 2014-08-28 19:19 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 62296
           Summary: EXECUTE_COMMAND_LINE not F2008 conforming
           Product: gcc
           Version: 4.9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libfortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: anlauf at gmx dot de

It appears that EXECUTE_COMMAND_LINE does not fully conform to F2008
in case the execute command fails.

F2008, 13.7.57 states:

CMDSTAT (optional) shall be a default integer scalar. It is an INTENT (OUT)
argument. It is assigned the value −1 if the processor does not support
command line execution, a processor-dependent positive value if an error
condition occurs, or the value −2 if no error condition occurs but WAIT
is present with the value false and the processor does not support
asynchronous execution. Otherwise it is assigned the value 0.
[...]
If a condition occurs that would assign a nonzero value to CMDSTAT but the
CMDSTAT variable is not present, error termination is initiated.


However, the following example behaves as follows:

program gfcbug126
  integer :: stat, cstat
  call execute_command_line ("/bin/true",  exitstat=stat, cmdstat=cstat)
  print *, stat, cstat
  call execute_command_line ("/bin/false", exitstat=stat, cmdstat=cstat)
  print *, stat, cstat
  call execute_command_line ("/bin/true",  exitstat=stat)
  print *, stat
  call execute_command_line ("/bin/false", exitstat=stat)
  print *, stat
end

Output:
           0           0
           1           0
           0
           1

I think the correct output should be like:
           0           0
           1           (some positive number, e.g. 1)
           0
 (error termination)

e.g. xlf 14.1 produces:
 0 0
 1 1
 0
"gfcbug126.f90", line 9: 1525-610 Error encountered while attempting to execute
the command:
/bin/false

Also, the (online) documentation should be adjusted to match the standard.
>From gcc-bugs-return-459427-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org Thu Aug 28 21:36:24 2014
Return-Path: <gcc-bugs-return-459427-listarch-gcc-bugs=gcc.gnu.org@gcc.gnu.org>
Delivered-To: listarch-gcc-bugs@gcc.gnu.org
Received: (qmail 28792 invoked by alias); 28 Aug 2014 21:36:23 -0000
Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm
Precedence: bulk
List-Id: <gcc-bugs.gcc.gnu.org>
List-Archive: <http://gcc.gnu.org/ml/gcc-bugs/>
List-Post: <mailto:gcc-bugs@gcc.gnu.org>
List-Help: <mailto:gcc-bugs-help@gcc.gnu.org>
Sender: gcc-bugs-owner@gcc.gnu.org
Delivered-To: mailing list gcc-bugs@gcc.gnu.org
Received: (qmail 28752 invoked by uid 48); 28 Aug 2014 21:36:16 -0000
From: "steven at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/43849] Add _gfortran_finalize function to close down the library
Date: Thu, 28 Aug 2014 21:36:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: gcc
X-Bugzilla-Component: fortran
X-Bugzilla-Version: 4.5.0
X-Bugzilla-Keywords:
X-Bugzilla-Severity: normal
X-Bugzilla-Who: steven at gcc dot gnu.org
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P3
X-Bugzilla-Assigned-To: unassigned at gcc dot gnu.org
X-Bugzilla-Target-Milestone: ---
X-Bugzilla-Flags:
X-Bugzilla-Changed-Fields: bug_status cc
Message-ID: <bug-43849-4-Ib2fVS7zNj@http.gcc.gnu.org/bugzilla/>
In-Reply-To: <bug-43849-4@http.gcc.gnu.org/bugzilla/>
References: <bug-43849-4@http.gcc.gnu.org/bugzilla/>
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: 7bit
X-Bugzilla-URL: http://gcc.gnu.org/bugzilla/
Auto-Submitted: auto-generated
MIME-Version: 1.0
X-SW-Source: 2014-08/txt/msg01924.txt.bz2
Content-length: 699

https://gcc.gnu.org/bugzilla/show_bug.cgi?idC849

Steven Bosscher <steven at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |NEW
                 CC|                            |steven at gcc dot gnu.org

--- Comment #5 from Steven Bosscher <steven at gcc dot gnu.org> ---
(In reply to Dominique d'Humieres from comment #4)
> Is this PR still pertinent (2013-12-21)?

Yes, it could be necessary to force the shutdown from other libraries
that may want to output something and will need the buffers to be
flushed for that (e.g. libcaf).


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
@ 2014-08-31 21:08 ` anlauf at gmx dot de
  2014-09-02 12:03 ` dominiq at lps dot ens.fr
                   ` (6 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gmx dot de @ 2014-08-31 21:08 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #1 from Harald Anlauf <anlauf at gmx dot de> ---
There was some confusion on my side regarding the semantics of
the CMDSTAT argument on my side.  I asked at

https://groups.google.com/forum/?hl=en#!topic/comp.lang.fortran/6ymZIb6flDg

where there was consensus that CMDSTAT should be zero if the command line
could be executed, even if the exit status is non-zero.

However, if the command could *not* be executed, there should be a
non-zero value for CMDSTAT.  However, modifying the code to

  integer :: stat, cstat
  character(len=255) :: cmdmsg
  cmdmsg = ""
  call execute_command_line ("/bin/true",  exitstat=stat, cmdstat=cstat,
cmdmsg=cmdmsg)
  print *, stat, cstat, "'", trim (cmdmsg), "'"
  call execute_command_line ("/bin/false", exitstat=stat, cmdstat=cstat,
cmdmsg=cmdmsg)
  print *, stat, cstat, "'", trim (cmdmsg), "'"
  call execute_command_line ("/nosuchfile",exitstat=stat, cmdstat=cstat,
cmdmsg=cmdmsg)
  print *, stat, cstat, "'", trim (cmdmsg), "'"
  call execute_command_line ("/bin/true",  exitstat=stat)
  print *, stat
  call execute_command_line ("/bin/false", exitstat=stat)
  print *, stat
  call execute_command_line ("/nosuchfile",exitstat=stat)
  print *, stat
end

produces:

           0           0 ''
           1           0 ''
sh: /nosuchfile: No such file or directory
         127           0 ''
           0
           1
sh: /nosuchfile: No such file or directory
         127

Thus the attempt to execute a non-existing command does not lead
to an appropriate error.  Looking at execute_command_line.c, the
execution uses system().  The Linux man page system(3) says:

       It is possible for the shell command to return 127, so that code is not
       a sure indication that the execve(2) call failed.

Unfortunately the man page does not say whether errno is set,
as it is done for execve(2).  So it might be necessary to replace
system(3) by something like fork/exec to get the error status.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
  2014-08-31 21:08 ` [Bug libfortran/62296] " anlauf at gmx dot de
@ 2014-09-02 12:03 ` dominiq at lps dot ens.fr
  2014-09-02 20:03 ` anlauf at gmx dot de
                   ` (5 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: dominiq at lps dot ens.fr @ 2014-09-02 12:03 UTC (permalink / raw)
  To: gcc-bugs

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

Dominique d'Humieres <dominiq at lps dot ens.fr> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |WAITING
   Last reconfirmed|                            |2014-09-02
     Ever confirmed|0                           |1

--- Comment #2 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
On x86_64-apple-darwin13.3, for the test in comment 1 I get

           0           0 ''
sh: /bin/false: No such file or directory
         127           0 ''
sh: /nosuchfile: No such file or directory
         127           0 ''
           0
sh: /bin/false: No such file or directory
         127
sh: /nosuchfile: No such file or directory
         127

From
https://groups.google.com/forum/?hl=en#!topic/comp.lang.fortran/6ymZIb6flDg it
seems that you are expecting too much of the EXECUTE_COMMAND_LINE options.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
  2014-08-31 21:08 ` [Bug libfortran/62296] " anlauf at gmx dot de
  2014-09-02 12:03 ` dominiq at lps dot ens.fr
@ 2014-09-02 20:03 ` anlauf at gmx dot de
  2014-12-04 21:10 ` anlauf at gmx dot de
                   ` (4 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gmx dot de @ 2014-09-02 20:03 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Harald Anlauf <anlauf at gmx dot de> ---
(In reply to Dominique d'Humieres from comment #2)
> On x86_64-apple-darwin13.3, for the test in comment 1 I get
> 
>            0           0 ''
> sh: /bin/false: No such file or directory
>          127           0 ''
> sh: /nosuchfile: No such file or directory
>          127           0 ''
>            0
> sh: /bin/false: No such file or directory
>          127
> sh: /nosuchfile: No such file or directory
>          127
> 
> From
> https://groups.google.com/forum/?hl=en#!topic/comp.lang.fortran/6ymZIb6flDg
> it seems that you are expecting too much of the EXECUTE_COMMAND_LINE options.

Probably.  I'm now wondering why EXECUTE_COMMAND_LINE was standardized
in a way that allows for ambiguous implementations without any reliable
advantage over the non-standard "SYSTEM" implementations.

One might be able to do better on any reasonable Unix/Linux system.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
                   ` (2 preceding siblings ...)
  2014-09-02 20:03 ` anlauf at gmx dot de
@ 2014-12-04 21:10 ` anlauf at gmx dot de
  2014-12-06 14:52 ` dominiq at lps dot ens.fr
                   ` (3 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: anlauf at gmx dot de @ 2014-12-04 21:10 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #4 from Harald Anlauf <anlauf at gmx dot de> ---
(In reply to Harald Anlauf from comment #3)
> One might be able to do better on any reasonable Unix/Linux system.

Replying to myself: Intel has changed/fixed their implementation of
EXECUTE_COMMAND_LINE in version 15.1, and it appears to work
reasonably now.


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
                   ` (3 preceding siblings ...)
  2014-12-04 21:10 ` anlauf at gmx dot de
@ 2014-12-06 14:52 ` dominiq at lps dot ens.fr
  2015-08-14  7:56 ` fxcoudert at gcc dot gnu.org
                   ` (2 subsequent siblings)
  7 siblings, 0 replies; 9+ messages in thread
From: dominiq at lps dot ens.fr @ 2014-12-06 14:52 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #5 from Dominique d'Humieres <dominiq at lps dot ens.fr> ---
(In reply to Harald Anlauf from comment #4)
> (In reply to Harald Anlauf from comment #3)
> > One might be able to do better on any reasonable Unix/Linux system.
>
> Replying to myself: Intel has changed/fixed their implementation of
> EXECUTE_COMMAND_LINE in version 15.1, and it appears to work
> reasonably now.

What does it mean for gfortran?


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
                   ` (4 preceding siblings ...)
  2014-12-06 14:52 ` dominiq at lps dot ens.fr
@ 2015-08-14  7:56 ` fxcoudert at gcc dot gnu.org
  2015-08-23 21:25 ` fxcoudert at gcc dot gnu.org
  2015-08-23 21:28 ` fxcoudert at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: fxcoudert at gcc dot gnu.org @ 2015-08-14  7:56 UTC (permalink / raw)
  To: gcc-bugs

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

Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|WAITING                     |ASSIGNED
                 CC|                            |fxcoudert at gcc dot gnu.org
           Assignee|unassigned at gcc dot gnu.org      |fxcoudert at gcc dot gnu.org

--- Comment #7 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
Patch proposed: https://gcc.gnu.org/ml/gcc-patches/2015-08/msg00758.html


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
                   ` (5 preceding siblings ...)
  2015-08-14  7:56 ` fxcoudert at gcc dot gnu.org
@ 2015-08-23 21:25 ` fxcoudert at gcc dot gnu.org
  2015-08-23 21:28 ` fxcoudert at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: fxcoudert at gcc dot gnu.org @ 2015-08-23 21:25 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #8 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
Author: fxcoudert
Date: Sun Aug 23 21:24:49 2015
New Revision: 227105

URL: https://gcc.gnu.org/viewcvs?rev=227105&root=gcc&view=rev
Log:
        PR libfortran/62296

        * intrinsics/execute_command_line.c (EXEC_INVALIDCOMMAND): New
        error code.
        (cmdmsg_values): New error message.
        (set_cmdstat): Rework runtime error.
        (execute_command_line): Handle invalid command line error status.

        * gfortran.dg/execute_command_line_2.f90: New test.

Added:
    trunk/gcc/testsuite/gfortran.dg/execute_command_line_2.f90
Modified:
    trunk/gcc/testsuite/ChangeLog
    trunk/libgfortran/ChangeLog
    trunk/libgfortran/intrinsics/execute_command_line.c


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Bug libfortran/62296] EXECUTE_COMMAND_LINE not F2008 conforming
  2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
                   ` (6 preceding siblings ...)
  2015-08-23 21:25 ` fxcoudert at gcc dot gnu.org
@ 2015-08-23 21:28 ` fxcoudert at gcc dot gnu.org
  7 siblings, 0 replies; 9+ messages in thread
From: fxcoudert at gcc dot gnu.org @ 2015-08-23 21:28 UTC (permalink / raw)
  To: gcc-bugs

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

Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |FIXED
   Target Milestone|---                         |6.0

--- Comment #9 from Francois-Xavier Coudert <fxcoudert at gcc dot gnu.org> ---
Fixed on trunk.


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-08-23 21:28 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-28 19:19 [Bug libfortran/62296] New: EXECUTE_COMMAND_LINE not F2008 conforming anlauf at gmx dot de
2014-08-31 21:08 ` [Bug libfortran/62296] " anlauf at gmx dot de
2014-09-02 12:03 ` dominiq at lps dot ens.fr
2014-09-02 20:03 ` anlauf at gmx dot de
2014-12-04 21:10 ` anlauf at gmx dot de
2014-12-06 14:52 ` dominiq at lps dot ens.fr
2015-08-14  7:56 ` fxcoudert at gcc dot gnu.org
2015-08-23 21:25 ` fxcoudert at gcc dot gnu.org
2015-08-23 21:28 ` fxcoudert at gcc dot gnu.org

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).