public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic
@ 2020-09-23 10:01 jeremy at jeremysanders dot net
  2020-09-23 16:43 ` [Bug fortran/97176] " kargl at gcc dot gnu.org
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: jeremy at jeremysanders dot net @ 2020-09-23 10:01 UTC (permalink / raw)
  To: gcc-bugs

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

            Bug ID: 97176
           Summary: Cannot return deferred length strings when using
                    -fno-automatic
           Product: gcc
           Version: 10.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jeremy at jeremysanders dot net
  Target Milestone: ---

Created attachment 49261
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=49261&action=edit
Test case

Functions returning deferred length strings return empty strings with the
-fno-automatic compiler option.

Please see the attached program (tested on trunk on godbolt.org).

$ gfortran testprog.f90
$ ./a.out
 Hello, world!

$ gfortran -fno-automatic testprog.f90
$ ./a.out

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

* [Bug fortran/97176] Cannot return deferred length strings when using -fno-automatic
  2020-09-23 10:01 [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic jeremy at jeremysanders dot net
@ 2020-09-23 16:43 ` kargl at gcc dot gnu.org
  2020-09-23 19:35 ` anlauf at gcc dot gnu.org
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: kargl at gcc dot gnu.org @ 2020-09-23 16:43 UTC (permalink / raw)
  To: gcc-bugs

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

kargl at gcc dot gnu.org changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kargl at gcc dot gnu.org

--- Comment #1 from kargl at gcc dot gnu.org ---
Workaround 1.

  Don't use -fno-automatic if you use a RESULT variable.

Workaround 2.

  Don't use a RESULT variable.

Workaround 3.

  Explicitly give entities the SAVE attribute whereby your
  testfunc() becomes

  function testfunc(string) result(res)
    character(:), allocatable, save :: res
    character(*), intent(in) :: string
    res = string
  end function testfunc

  which leads to the informative error message

  % gfcx -o z a.f90 && ./z
  a.f90:10:42:

   10 |  character(:), allocatable, save :: res
      |                                     1
  Error: RESULT attribute conflicts with SAVE attribute at (1)

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

* [Bug fortran/97176] Cannot return deferred length strings when using -fno-automatic
  2020-09-23 10:01 [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic jeremy at jeremysanders dot net
  2020-09-23 16:43 ` [Bug fortran/97176] " kargl at gcc dot gnu.org
@ 2020-09-23 19:35 ` anlauf at gcc dot gnu.org
  2020-09-24  6:44 ` jeremy at jeremysanders dot net
  2020-10-05 12:23 ` dominiq at lps dot ens.fr
  3 siblings, 0 replies; 5+ messages in thread
From: anlauf at gcc dot gnu.org @ 2020-09-23 19:35 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #2 from anlauf at gcc dot gnu.org ---
(In reply to kargl from comment #1)
> Workaround 3.
> 
>   Explicitly give entities the SAVE attribute whereby your
>   testfunc() becomes
> 
>   function testfunc(string) result(res)
>     character(:), allocatable, save :: res
>     character(*), intent(in) :: string
>     res = string
>   end function testfunc

That is explicit standard violation.

Adding a blank SAVE statement in the function body seems to work as expected,
so a user who believes in -fno-automatic may call it a gfortran bug.

Personally, I'd recommend:

Workaround 4.

  Never use -fno-automatic.

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

* [Bug fortran/97176] Cannot return deferred length strings when using -fno-automatic
  2020-09-23 10:01 [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic jeremy at jeremysanders dot net
  2020-09-23 16:43 ` [Bug fortran/97176] " kargl at gcc dot gnu.org
  2020-09-23 19:35 ` anlauf at gcc dot gnu.org
@ 2020-09-24  6:44 ` jeremy at jeremysanders dot net
  2020-10-05 12:23 ` dominiq at lps dot ens.fr
  3 siblings, 0 replies; 5+ messages in thread
From: jeremy at jeremysanders dot net @ 2020-09-24  6:44 UTC (permalink / raw)
  To: gcc-bugs

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

--- Comment #3 from Jeremy Sanders <jeremy at jeremysanders dot net> ---
I'm not using -fno-automatic out of choice, unfortunately (I'd never use it
otherwise). I maintaining part of a large software package which has this
switched on (for unclear reasons). It will require some testing to remove this
option.

What would be really useful is a warning in the manual which makes it clear
that it is a bad idea to use this option. This would help prevent people
switching it on without knowing that it breaks standards-conforming code.
Unless you know the fortran standard well, it just seems a minor code
generation option from the current docs. I'd be happy if this bug was closed
with a documentation update (or a warning is added for this case).

What about adding something like

"Use of this option is highly discouraged as it can break standard-conforming
code. Its use is only intended as a short-term fix for non-standard code."

?

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

* [Bug fortran/97176] Cannot return deferred length strings when using -fno-automatic
  2020-09-23 10:01 [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic jeremy at jeremysanders dot net
                   ` (2 preceding siblings ...)
  2020-09-24  6:44 ` jeremy at jeremysanders dot net
@ 2020-10-05 12:23 ` dominiq at lps dot ens.fr
  3 siblings, 0 replies; 5+ messages in thread
From: dominiq at lps dot ens.fr @ 2020-10-05 12:23 UTC (permalink / raw)
  To: gcc-bugs

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

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

           What    |Removed                     |Added
----------------------------------------------------------------------------
           Severity|normal                      |enhancement
   Last reconfirmed|                            |2020-10-05
           Priority|P3                          |P5
     Ever confirmed|0                           |1
             Status|UNCONFIRMED                 |NEW

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

end of thread, other threads:[~2020-10-05 12:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-23 10:01 [Bug fortran/97176] New: Cannot return deferred length strings when using -fno-automatic jeremy at jeremysanders dot net
2020-09-23 16:43 ` [Bug fortran/97176] " kargl at gcc dot gnu.org
2020-09-23 19:35 ` anlauf at gcc dot gnu.org
2020-09-24  6:44 ` jeremy at jeremysanders dot net
2020-10-05 12:23 ` dominiq at lps dot ens.fr

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