https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25714
--- Comment #8 from Tobias Schlüter <tobi at gcc dot gnu.org> --- No more temporary FAICT https://godbolt.org/z/o8fYE1nej If written as a proper function: function c(a, b) character(2) :: c character(1) :: a character(1) :: b c = a//b end we get: c_: push rbx mov r9, rcx mov rbx, rdi mov rcx, rdx mov r8d, 1 mov edx, 1 mov edi, 2 sub rsp, 16 lea rsi, [rsp+14] call _gfortran_concat_string movzx eax, WORD PTR [rsp+14] mov WORD PTR [rbx], ax add rsp, 16 pop rbx ret ... and likewise for the original testcase.