http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56149
--- Comment #6 from Paul Laidler <paul.laidler at ntlworld dot com> 2013-01-31 16:29:46 UTC --- Yes, winio is written in C with the binding "int winio(char *string, ...)" and it is not Fortran standard conforming. In my opinion there should be no problem with backwards compatibility but I am thinking of a Windows environment and have no inside knowledge of how the C code produced by gFortran is passed on to gcc. On 31 January 2013 15:54, sgk at troutmask dot apl.washington.edu < gcc-bugzi...@gcc.gnu.org> wrote: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56149 > > --- Comment #5 from Steve Kargl <sgk at troutmask dot apl.washington.edu> > 2013-01-31 15:54:56 UTC --- > On Wed, Jan 30, 2013 at 07:58:27PM +0000, paul.laidler at ntlworld dot com > wrote: > > --- Comment #2 from Paul Laidler <paul.laidler at ntlworld dot com> > 2013-01-30 19:58:27 UTC --- > > > > Many thanks for your reply and interest. > > > > The ClearWin+ function winio@ (winio$ in gFortran) emulates the C > function > > printf that takes a format string then a variable number of arguments > > depending on the content of the format. The function can be programmed > in C > > on the basis that all arguments are passed as 64 bit addresses until you > > get to the length of the format string which has a size well below the > > minimum possible address value. Any arguments after that will also be > > string lengths. The format string cannot be processed to find out what > > arguments are supplied until we know its length. > > My only interest here is to clearly define the issue. With that > in mind, is winio a function written in C (or at least has a C > prototype) with the form "int winio(char *string, ...);"? > > If the answer is "yes", then the issue is not related to gfortran's > implementation of the ISO C Binding feature. The Fortran 2003 > standard specifically states that vardiac functions are not covered > under BIND(C): > > NOTE 15.21 > The C language allows specification of a C function that can take a > variable number of arguments (C standard, 7.15). This standard does > not provide a mechanism for Fortran procedures to interoperate with > such C functions. > > It seems to me that the only portable solution to your issue is to > tell your users that the proper way to call winio from Fortran is > > call winio("Some string" // C_NULL_CHAR, ...); > or > call winio(trim(string) // C_NULL_CHAR, ...); > > In your implementation of winio, you will now have a terminated > string. You can parse the string and not depend on the hidden > length. > > As Tobias notes, changing the hidden length from a 32-bit integer > to a 64-bit integer breaks backwards compatibility. The gfortran > developer would now need to tell everyone else that may be > mucking around with the hidden length argument to change their > code. Everyone with libraries and modules that use Fortran strings > would also likely need to recompile. > > -- > Configure bugmail: http://gcc.gnu.org/bugzilla/userprefs.cgi?tab=email > ------- You are receiving this mail because: ------- > You reported the bug. >