On Mon, Feb 18, 2019 at 7:25 PM Segher Boessenkool < seg...@kernel.crashing.org> wrote:
> On Mon, Feb 18, 2019 at 10:48:35AM +0200, Janne Blomqvist wrote: > > I wonder if we shouldn't exorcise all the varargs stuff, it seems to > > cause more problems than benefits? But not in stage4 if we can avoid > > it.. > > On the Power ABIs at least, unprototyped functions (a K&R thing for C) are > handled the same as varargs (with zero fixed arguments). How does this > tie in with Fortran requirements? > Varargs don't exist in Fortran. But we need some kind of support for so-called "implicit interfaces" (which was the only thing available before Fortran 90), which I guess are pretty similar to the K&R unprototyped functions. E.g. something like subroutine foo call bar(1, 2, 3.0) end subroutine foo is perfectly valid code, even though discouraged by modern programming practice. Here the compiler can only deduce from the syntax that bar must be a subroutine that takes (int, int, float) arguments. And bar can be in another translation unit, so we have no idea what it's actual interface is, the onus is on the programmer that they match. Similarly, from subroutine foo f = bar(1, 2) print *, f end subroutine foo the compiler can deduce that bar is a function that takes (int, int) arguments, and returns a float (due to implicit typing rules). However, as previously mentioned in this thread subroutine foo call bar(1, 2) f = bar(1, 2) print *, f end subroutine foo is invalid since bar cannot be both a subroutine and a function. Also, getting back to my first statement subroutine foo call bar(1, 2) call bar(1, 2, 3) end subroutine foo is invalid since Fortran doesn't have vararg functions (well, with the newer "explicit interfaces", optional arguments are possible, but that's still not the same thing as varargs). I'm not really sure if there is any good reason why GFortran occasionally generates these varargs declarations, hence my suggestion to get rid of them. Unless the middle-end is planning to get rid of untyped function decls? -- Janne Blomqvist