https://gcc.gnu.org/bugzilla/show_bug.cgi?id=121203
--- Comment #2 from anlauf at gcc dot gnu.org --- Note: the code works properly when eval is a contained subroutine, as in: program p character(10), external :: f call eval(f,"abc") call eval(f,"abc") ! double free or corruption contains subroutine eval(func,c_arg) character(*) c_arg character(*) func external func print *, len (c_arg) print *,func(c_arg) end subroutine end character(10) function f(arg) character(*) arg f=arg end In that case, the dump has: eval (f, &"abc"[1]{lb: 1 sz: 1}, 10, 3); eval (f, &"abc"[1]{lb: 1 sz: 1}, 10, 3);