https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110419

--- Comment #15 from Mikael Morin <mikael at gcc dot gnu.org> ---
rs6000_pass_by_reference returns true with -m32, and false with -m64.

So the second argument is passed by reference with -m32, and by value with
-m64.
So the code in val looks right, it is the code in p calling val which isn't.


val is declared as:

void val (character(kind=1)[1:1] & restrict x, character(kind=1)[1:1] c,
integer(kind=8) _x, integer(kind=8) _c)

so the second argument has array type, whereas p calls val with:

void p ()
{
  ...
  character(kind=1) char.5_3;

  <bb 2> :
  ...
  val (&"A"[1]{lb: 1 sz: 1}, char.5_3, 1, 1); [static-chain: &FRAME.6]

so the second actual argument has non-array type.

Reply via email to