rjmccall added a comment.

It's not generically true that "anything can be tail-called if it's 
`noreturn`".  For one, `noreturn` doesn't imply that the function doesn't exit 
by e.g. throwing or calling `longjmp`.  For another, the most important user 
expectation of tail calls is that a long series of tail calls will exhibit zero 
overall stack growth; in a caller-pop calling convention, calling a function 
with more parameters may require growing the argument area in a way that cannot 
be reversed, so e.g. a long sequence of tail calls alternating between 
1-argument and 2-argument functions will eventually exhaust the stack, which 
violates that user expectation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D99517/new/

https://reviews.llvm.org/D99517

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to