Repository navigation
Conversation
This change is pessimistic, but it will guarentee correctness. We specifically know that LowerFastTailCall fundamentally is broken. This has been fixed in dotnet#26255. This change exists only to make sure that we do not have SBC in older releases. Note that this changes behavoir, there are valid fast tail calls which could have avoided StackOverFlow exceptions. These tail calls must have not had overlapping slot locations, for a flawed definition of slot location. Which simply means they got lucky when generating code.
|
Can you run Linux/x64 diffs for framework assemblies + tests and see what kind of diffs there are? |
|
I presume you have verified that it does indeed fix https://github.com/dotnet/coreclr/issues/27904 |
|
As mentioned in person, I will run diffs. Although I expect there will be a non-trivial amount of diffs. |
|
Closing this change, as the opportunity to regress valid scenarios is too high. |
|
@jashook I would like to understand how that change would regress valid scenarios. When someone doesn't use the explicit tail. prefix for a call, the fast tail call that jit makes is just an optimization and I believe noone can rely on the fact that JIT will emit a tail call there. Am I wrong? |
|
You are not wrong, it would be undefined behavior to expect the optimization. However that being said, this removes the optimization for a large set of methods and can lead to behavior differences between versions of release 3.1. Which I do not believe is desirable. |
This change is pessimistic, but it will guarentee correctness.
We specifically know that LowerFastTailCall fundamentally is broken.
This has been fixed in #26255.
This change exists only to make sure that we do not have SBC in older releases.
Note that this changes behavoir, there are valid fast tail calls which could have avoided StackOverFlow exceptions.
These tail calls must have not had overlapping slot locations, for a flawed definition of slot location. Which simply means they got lucky when generating code.