public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "pault at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/64952] New: Missing temporary in assignment from elemental function Date: Thu, 05 Feb 2015 19:22:00 -0000 [thread overview] Message-ID: <bug-64952-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=64952 Bug ID: 64952 Summary: Missing temporary in assignment from elemental function Product: gcc Version: 5.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran Assignee: unassigned at gcc dot gnu.org Reporter: pault at gcc dot gnu.org See https://groups.google.com/forum/#!topic/comp.lang.fortran/TvVY5j3GPmg gfortran produces wrong result from: PROGRAM Main INTEGER :: i, index(5) = (/ (i, i = 1,5) /) REAL :: array(5) = (/ (i+0.0, i = 1,5) /) array = Fred(index,array) PRINT *, array CONTAINS ELEMENTAL FUNCTION Fred (n, x) REAL :: Fred INTEGER, INTENT(IN) :: n REAL, INTENT(IN) :: x ! In general, this would be in an external procedure Fred = x+SUM(array(:n-1))+SUM(array(n+1:)) END FUNCTION Fred END PROGRAM Main outputs 15.0000000 29.0000000 56.0000000 109.000000 214.000000 when result should be 5*15.0 A temporary should be produced for array = Fred(index, array). See the clf thread for the reasoning. In a nutshell, the reason that won the day (I had another point of view) is: The execution of the assignment shall have the same effect as if the evaluation of expr and the evaluation of all expressions in variable occurred before any portion of the variable is defined by the assignment. The evaluation of expressions within variable shall neither affect nor be affected by the evaluation of expr. Clearly, the above code violates this requirement because of the references to 'array' in 'Fred'. I think that we will have to provide an attribute that marks up array valued elemental functions that have any external array references and provide a temporary for assignment from one of these. Fortunately, it only affects contained functions so that we do not have to carry it across when using modules. Paul
next reply other threads:[~2015-02-05 19:22 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-02-05 19:22 pault at gcc dot gnu.org [this message] 2015-02-05 19:59 ` [Bug fortran/64952] " burnus at gcc dot gnu.org 2015-02-06 11:19 ` mikael at gcc dot gnu.org 2015-02-07 20:00 ` pault at gcc dot gnu.org 2015-02-08 13:00 ` mikael at gcc dot gnu.org 2015-03-23 8:27 ` mikael at gcc dot gnu.org 2015-03-23 9:35 ` paul.richard.thomas at gmail dot com 2015-03-23 12:28 ` mikael at gcc dot gnu.org 2015-03-24 10:02 ` ktkachov at gcc dot gnu.org 2015-03-24 10:16 ` dominiq at lps dot ens.fr 2015-03-24 10:52 ` mikael at gcc dot gnu.org 2015-03-25 11:10 ` mikael at gcc dot gnu.org 2015-03-26 13:03 ` mikael 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-64952-4@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: linkBe 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).