diff options
author | Reid Kleckner <reid@kleckner.net> | 2015-04-28 22:19:32 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2015-04-28 22:19:32 +0000 |
commit | ddd40964f07769412be1916b4ce661027f14a3c6 (patch) | |
tree | 393414f1e30cd6a7c02d026c92c5f77a565e5c1f /clang/lib/CodeGen/CGLoopInfo.cpp | |
parent | b49febeaee5dec219fae5d5f72fcdf4d3f24030f (diff) | |
download | bcm5719-llvm-ddd40964f07769412be1916b4ce661027f14a3c6.tar.gz bcm5719-llvm-ddd40964f07769412be1916b4ce661027f14a3c6.zip |
[SEH] Add 32-bit lowering code for __try
This is just the clang-side of 32-bit SEH. LLVM still needs work, and it
will determinstically fail to compile until it's feature complete.
On x86, all outlined handlers have no parameters, but they do implicitly
take the EBP value passed in and use it to address locals of the parent
frame. We model this with llvm.frameaddress(1).
This works (mostly), but __finally block inlining can break it. For now,
we apply the 'noinline' attribute. If we really want to inline __finally
blocks on 32-bit x86, we should teach the inliner how to untangle
frameescape and framerecover.
Promote the error diagnostic from codegen to sema. It now rejects SEH on
non-Windows platforms. LLVM doesn't implement SEH on non-x86 Windows
platforms, but there's nothing preventing it.
llvm-svn: 236052
Diffstat (limited to 'clang/lib/CodeGen/CGLoopInfo.cpp')
0 files changed, 0 insertions, 0 deletions