public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "sgk at troutmask dot apl.washington.edu" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug fortran/109500] SIGABRT when calling a function that returns an unallocated value Date: Wed, 19 Apr 2023 19:42:33 +0000 [thread overview] Message-ID: <bug-109500-4-fBGDJtC4y6@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-109500-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109500 --- Comment #16 from Steve Kargl <sgk at troutmask dot apl.washington.edu> --- On Wed, Apr 19, 2023 at 07:15:50PM +0000, anlauf at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109500 > > --- Comment #15 from anlauf at gcc dot gnu.org --- > (In reply to Steve Kargl from comment #13) > > Note 1 in Fortran 2023, Sec. 8.5.3, p. 100, is non-normative > > text. I suppose one can claim that gfortran should throw an > > error when a function result is marked with the allocatable > > attribute. > > You mean when the function result is not allocated in that case? First, note, 'allocated(f())' throws an error. Error: 'array' argument of 'allocated' intrinsic at (1) must be a variable You get this error regardless of the allocation status of the function result. Now, with the original code, is_allocated(f()) The function reference is evaluated, and then the function result (aka it's value) is argument associated with an allocatable dummy argument. This is technically wrong as the actual argument (aka value returned by the function reference) should not have the allocatable attribute. Fortran 2018 15.5.2.6 Allocatable dummy variables The requirements in this subclause apply to actual arguments that correspond to allocatable dummy data objects. The actual argument shall be allocatable. It is permissible for the actual argument to have an allocation status of unallocated. I'll repeat. The actual argument is the value resulting from the function reference. The "shall" in "shall be allocatable" applies to something the programmer must ensure. > > Unfortunately, it is likely a catch-22 situation > > in that gfortran needs to know the function result is allocatable > > so it can do the allocaton within the function, but it is not > > an allocatable outside of the function. Not sure gfortran > > can mark an internal symbol to do both. > > I checked how to implement a run-time check for a non-allocated > function result, but did this in the wrong place - in the caller. > This did work when I did allocate and the deallocate before return, > otherwise the result variable is simply undefined, and the check does > not work. > > So a run-time check needs to be put where the function return is generated. > If we go back to the original code and modify to allocate f by say doing 'f = 42' in f(), gfortran produces % gfcx -o z -Wall a.f90 && ./z T This is the problem. Yes, f is allocated and assigned 42. The printed 'T' is bogus because 42 is value of the function. 42 is no allocatable. One place to possibly check for an error is when gfortran resolves argument association. If a dummy argument is allocatable, the actual argument needs to be allocatable and cannot not also be a function result variable.
next prev parent reply other threads:[~2023-04-19 19:42 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-04-13 13:24 [Bug fortran/109500] New: " leandro.lupori at linaro dot org 2023-04-13 15:05 ` [Bug fortran/109500] " kargl at gcc dot gnu.org 2023-04-13 17:06 ` leandro.lupori at linaro dot org 2023-04-13 18:12 ` kargl at gcc dot gnu.org 2023-04-13 18:32 ` anlauf at gcc dot gnu.org 2023-04-13 19:44 ` leandro.lupori at linaro dot org 2023-04-13 21:28 ` anlauf at gcc dot gnu.org 2023-04-13 21:34 ` sgk at troutmask dot apl.washington.edu 2023-04-14 19:24 ` anlauf at gcc dot gnu.org 2023-04-16 19:42 ` anlauf at gcc dot gnu.org 2023-04-17 12:14 ` leandro.lupori at linaro dot org 2023-04-17 20:20 ` anlauf at gcc dot gnu.org 2023-04-19 17:25 ` leandro.lupori at linaro dot org 2023-04-19 19:02 ` sgk at troutmask dot apl.washington.edu 2023-04-19 19:06 ` anlauf at gcc dot gnu.org 2023-04-19 19:15 ` anlauf at gcc dot gnu.org 2023-04-19 19:42 ` sgk at troutmask dot apl.washington.edu [this message] 2023-04-19 21:03 ` anlauf at gcc dot gnu.org 2023-04-20 5:22 ` kargl at gcc dot gnu.org 2023-04-20 16:29 ` sgk at troutmask dot apl.washington.edu 2023-04-20 19:02 ` anlauf at gcc dot gnu.org 2023-04-20 19:04 ` anlauf at gcc dot gnu.org 2023-04-20 20:02 ` anlauf at gcc dot gnu.org 2023-04-22 18:50 ` cvs-commit at gcc dot gnu.org 2023-04-23 18:59 ` 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-109500-4-fBGDJtC4y6@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).