The problem with going that route is that the programmer ends up using a customized, i.e, non-supported, version of the compiler. In the long run, that's a mountain of headaches that become impractical to deal with.
No one is saying it is perfect 🙂 But the choice is simple: either you do not have the functionality you need, or you patch it to work the way you want. I have another example here.
There was a change to
generics.hashes.pas that broke it on Darwin x86_64, and that change was applied to both
main and
fixes_3_2. I reported the issue and attached a patch. It was accepted into main, but not into fixes_3_2, so that branch remains broken, and my request to merge the fix into the fixes branch was ignored.
As a result, I simply use a fixes_3_2 build for daily work with my patch applied on top. In practice, this causes zero problems and fully solves the issue for me (while others, unfortunately, are still stuck with the buggy version). It is not that you are locked to a specific compiler version; rather, you are using a customised build that addresses what is important to you.