diff options
| author | Reid Kleckner <rnk@google.com> | 2015-09-16 20:16:27 +0000 |
|---|---|---|
| committer | Reid Kleckner <rnk@google.com> | 2015-09-16 20:16:27 +0000 |
| commit | b005d281c36c09eda1b85db59e2c183ed5defca5 (patch) | |
| tree | 8263838e6c8079eceaccb60c61aa8c393205aa95 /llvm/include | |
| parent | 10aa77032de43681231e81ee3f2e7d232b16dc9c (diff) | |
| download | bcm5719-llvm-b005d281c36c09eda1b85db59e2c183ed5defca5.tar.gz bcm5719-llvm-b005d281c36c09eda1b85db59e2c183ed5defca5.zip | |
[WinEH] Pull Adjectives and CatchObj out of the catchpad arg list
Clang now passes the adjectives as an argument to catchpad.
Getting the CatchObj working is simply a matter of threading another
static alloca through codegen, first as an alloca, then as a frame
index, and finally as a frame offset.
llvm-svn: 247844
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/CodeGen/WinEHFuncInfo.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/llvm/include/llvm/CodeGen/WinEHFuncInfo.h b/llvm/include/llvm/CodeGen/WinEHFuncInfo.h index 31021f12858..1c81c713289 100644 --- a/llvm/include/llvm/CodeGen/WinEHFuncInfo.h +++ b/llvm/include/llvm/CodeGen/WinEHFuncInfo.h @@ -139,8 +139,15 @@ struct SEHUnwindMapEntry { struct WinEHHandlerType { int Adjectives; - GlobalVariable *TypeDescriptor; int CatchObjRecoverIdx; + /// The CatchObj starts out life as an LLVM alloca, is turned into a frame + /// index, and after PEI, becomes a raw offset. + union { + const AllocaInst *Alloca; + int FrameOffset; + int FrameIndex; + } CatchObj = {}; + GlobalVariable *TypeDescriptor; ValueOrMBB Handler; }; @@ -176,6 +183,7 @@ struct WinEHFuncInfo { int EHRegNodeEscapeIndex = INT_MAX; const AllocaInst *EHRegNode = nullptr; int EHRegNodeFrameIndex = INT_MAX; + int EHRegNodeEndOffset = INT_MAX; WinEHFuncInfo() {} }; |

