For anyone considering callee-cleanup to be a desirable direction, please know that the general thought is more towards caller-cleanup and that callee-cleanup was a mistake.
There are disagreements on the issue, but I don't think any feature that would end up mandating either of those will pass the committee. We're having similar issues with contracts (albeit there, we're having issues only on callee-cleanup arches).
Got any links for those who want to find out more? I'm ignorant of any recent discussion.
My impression has always been that callee-cleanup is annoying because only Microsoft does it; all "real" ABIs are caller-cleanup, and then there's this one funky ABI that destroys parameters in the "wrong" order and complicates the Standard.
But, every time cleanup order pops into the zeitgeist, it's someone claiming that callee-cleanup (a.k.a. [[clang::trivial_abi]]) is strictly better for codegen, because it lets you eliminate more aliasing, turn more things into tail-calls (because now the caller's job is done at the `call` instruction — no cleanup to be done afterward), and so on.
So I'm surprised to hear that callee-cleanup is the "mistaken" one.
I absolutely agree (if needed) that no vendor is ever going to change their calling convention from caller to callee nor from callee to caller, so a proposal mandating either of those (at least for existing ordinary types, as opposed to some brand-new species of type that has never existed before) would be dead on arrival.
–Arthur