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.