diff options
| author | Reid Kleckner <rnk@google.com> | 2015-10-16 23:43:27 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2015-10-16 23:43:27 +0000 |
| commit | 28e490342b570ca1f261811e98f31b52e7111cec (patch) | |
| tree | eef4a798a32aab53eb3653bf976bd9a170e3a0f6 /llvm/include | |
| parent | 02b74368ce181614741c7f5aa3a39a86df78f9af (diff) | |
| download | bcm5719-llvm-28e490342b570ca1f261811e98f31b52e7111cec.tar.gz bcm5719-llvm-28e490342b570ca1f261811e98f31b52e7111cec.zip | |
[WinEH] Fix stack alignment in funclets and ParentFrameOffset calculation
Our previous value of "16 + 8 + MaxCallFrameSize" for ParentFrameOffset
is incorrect when CSRs are involved. We were supposed to have a test
case to catch this, but it wasn't very rigorous.
The main effect here is that calling _CxxThrowException inside a
catchpad doesn't immediately crash on MOVAPS when you have an odd number
of CSRs.
llvm-svn: 250583
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Target/TargetFrameLowering.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/include/llvm/Target/TargetFrameLowering.h b/llvm/include/llvm/Target/TargetFrameLowering.h index 9585f7c3498..398c91ef562 100644 --- a/llvm/include/llvm/Target/TargetFrameLowering.h +++ b/llvm/include/llvm/Target/TargetFrameLowering.h @@ -265,6 +265,10 @@ public: RegScavenger *RS = nullptr) const { } + virtual unsigned getWinEHParentFrameOffset(const MachineFunction &MF) const { + report_fatal_error("WinEH not implemented for this target"); + } + /// eliminateCallFramePseudoInstr - This method is called during prolog/epilog /// code insertion to eliminate call frame setup and destroy pseudo /// instructions (but only if the Target is using them). It is responsible |

