RFC: Implementing FSEEK intrinsic, ErrLabel optional argument
Brooks Moses
brooks.moses@codesourcery.com
Sun Dec 17 13:22:00 GMT 2006
Brooks Moses wrote:
> There's currently only one G77 intrinsic not implemented in GFortran --
> the FSEEK instrinsic. The specification for this in G77 is
>
> CALL FSeek(Unit, Offset, Whence, ErrLab)
>
> where ErrLab is an optional argument described as "'*label', where label
> is the label of an executable statement."
>
> Steve and I talked about this a bit on IRC earlier this evening, and
> were strongly considering implementing this with the error label ignored
> (and letting the subroutine just abort on error conditions) because of
> the complexities involved in such a thing, but after not thinking about
> it for a while, I realized there's already a mechanism in place for
> handling exactly this: alternate returns from subroutines. I should
> have known, of course, because that's why it's "*label" and not just
> "label".
>
> (Admittedly, an optional alternate-return argument isn't exactly allowed
> by the standard, but we can probably finesse it for an intrinsic.)
>
> There aren't any existing intrinsics that have alternate returns, are
> there? Does anyone have any handy suggestions for how to go about
> writing one that does?
Ok, PRs 30235 through 30237 later, and I'm beginning to think that
Steve's suggestion is the right way to go after all. Alternate return
arguments are handled completely differently from other arguments (the
expr or sym pointer in the argument list is simply NULL), and the
instrinsics machinery doesn't have anything at all in place to deal with
that.
Currently, PR 30237 means that if we implented FSEEK as a three-argument
intrinsic, and someone put in a alternate-return fourth argument in
their code, that extra argument would get ignored, which in this case is
as close to the Right Thing as we'll get. However, as soon as someone
fixes PR 30237, that will break, and there will be a syntax error about
the alternate-return argument instead.
- Brooks
More information about the Fortran
mailing list