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

--- Comment #29 from David Edelsohn <dje at gcc dot gnu.org> ---
I don't know if this is a BE issue or a struct issue.  AIX doesn't pass
characters in structs normally.

Is there any other debugging output from the GFORTRAN other than parse? 
-fdump-lang-all doesn't seem to produce any additional output.

I'm trying to guess / brainstorm about why GCC sometimes would shift the char
value and other times would not.

Maybe something about the way that GFORTRAN is passing the string by value. 
257.optimized shows

  val (&"B"[1]{lb: 1 sz: 1}, "B", 1, 1);
  val (&"A"[1]{lb: 1 sz: 1}, "A", 1, 1);
  val (&"A"[1]{lb: 1 sz: 1}, 65, 1, 1);
  val (&"A"[1]{lb: 1 sz: 1}, 65, 1, 1);
  val (&"A"[1]{lb: 1 sz: 1}, 65, 1, 1);
  _37 = c[1]{lb: 1 sz: 1};
  val (&"1"[1]{lb: 1 sz: 1}, _37, 1, 1);
  _38 = c[1]{lb: 1 sz: 1};
  val (&"1"[1]{lb: 1 sz: 1}, _38, 1, 1);

&"B"[1] is not shifted.  65 is not shifted.  "B" is shifted.

GFORTRAN is passing the value in different ways that trigger different parts of
the target ABI.  It seems to be assuming that those different parts of the ABI
and forms of parameter passing will produce the same results in terms of
padding, but that is not guaranteed.

Reply via email to