This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [Patch, Fortran] PR34079 - BIND(C) and characters - unneeded character length passed


:REVIEWMAIL:

Hi Tobias,

This patch simply does not generate the extra argument(s) when calling a
BIND(C) procedure.

We also need to not consider these extra arguments when creating code for procedures, and also for function results (and probably also when creating the DECLs for these functions, which is handled in a different place IIRC). For example, with your patch, the following code:


subroutine foo(x) bind(c)
  character(len=1) :: x
  print *, x
end subroutine foo

function bar(x) bind(c)
  character(len=1) :: x, bar
  bar = x
end function bar

program test
  interface
    subroutine foo(x) bind(c)
      character(len=1) :: x
    end subroutine foo

    function bar(x) bind(c)
      character(len=1) :: x, bar
    end function bar
  end interface
  character(len=1) :: x

  call foo(" ")
  x = " "
  print *, bar(x)
end program test

generates the following code (excerpts from the tree dump):

foo (x, _x)    /* there shouldn't be a _x here */
{
  [...]
}

bar (__result, .__result, x, _x) /* there should be neither _x nor .__result here */
{
(*__result)[1]{lb: 1 sz: 1} = (*x)[1]{lb: 1 sz: 1};
}


test ()
{
foo (&" "[1]{lb: 1 sz: 1}); /* this one is correct, per your patch; I don't know if the DECL for the function is correct, though; I need to check. */


[...]

bar ((char[1:1] *) &str.3, 1, &x[1]{lb: 1 sz: 1}); /* this one is half correct, because there's still an extra 1 as second argument */
}



I'll try to give more pointers to where this should be fixed, when I have time (I have looked at this code multiple times, while trying to get unique DECLs per function, including correct list of arg types). There might also be other subtleties, but I wanted to give you this heads-up as soon as possible.


FX

PS: I was truly amazed at the regexps in your testcases! that's great (and probably hard) work


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]