https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102765
--- Comment #4 from Siarhei Siamashka <siarhei.siamashka at gmail dot com> --- First of all, it's my own fault for not just bisecting the GDC code from the day one to figure out all the relevant details many months earlier. The code is large and takes a lot of time to compile, so I was lazy. And I apologise for this. Now comments from https://forum.dlang.org/thread/sspkdp$1m4n$1...@digitalmars.com provided some missing bits of important information. I may be still wrong, so please correct me if necessary, but the root cause of this performance regression appears to be an attempt to fix the actual problem PR104317 in GDC11 via some excessively invasive PR99914 that ended up evolving GDC in a wrong direction. Just imagine someone encountering something like the examples from https://stackoverflow.com/questions/3691835/why-uninitialized-global-variable-is-weak-symbol and then suddenly making a strange conclusion that all template functions should be non-inlineable in a C++ compiler (unless LTO is enabled). Looks like that's exactly what happened to GDC. The D language standard documentation is incomplete and this isn't helping. But the developers of the other D compilers seem to have an opinion that inlining template functions is okay (due to the same or at least similar ODR rules as in C++).