]> granicus.if.org Git - clang/commit
[SEH] Delete the 32-bit IR lowering for __finally blocks and use x64
authorReid Kleckner <reid@kleckner.net>
Wed, 1 Jul 2015 21:00:00 +0000 (21:00 +0000)
committerReid Kleckner <reid@kleckner.net>
Wed, 1 Jul 2015 21:00:00 +0000 (21:00 +0000)
commit184ac2d8e097ddedd9cc33f3ad4ed8c222fc5299
tree0938cca420faf92e3ba16259a117098f041d75b7
parent939a9d5b47c0980d05e3d8f4db290a36958f7930
[SEH] Delete the 32-bit IR lowering for __finally blocks and use x64

32-bit finally funclets are intended to be called both directly from the
parent function and indirectly from the EH runtime. Because we aren't
contorting LLVM's X86 prologue to match MSVC's, calling the finally
block directly passes in a different value of EBP than the one that the
runtime provides. We need an adapter thunk to adjust EBP to the expected
value. However, WinEHPrepare already has to solve this problem when
cleanups are not pre-outlined, so we can go ahead and rely on it rather
than duplicating work.

Now we only do the llvm.x86.seh.recoverfp dance for 32-bit SEH filter
functions.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@241187 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/CGException.cpp
lib/CodeGen/CodeGenFunction.h
test/CodeGen/exceptions-seh-finally.c
test/CodeGen/exceptions-seh.c