No, the reason that we need to mark `gcsafe` in this case seems to be different one. Compiler can infer `gcsafe`.
I think the problem here is that it wrongly analyses that this proc is not gcsafe and then stops and wont apply that infer. Wrongly, because it's single thread mode, and so it's safe, yet compiler prints warning that it's not thread safe, I created an issue <https://github.com/nim-lang/Nim/issues/21503>