[PATCH] D47988: [CodeGen] Emit MSVC funclet IR for Obj-C exceptions
Shoaib Meenai via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Sat Jun 9 14:54:44 PDT 2018
smeenai created this revision.
smeenai added reviewers: DHowett-MSFT, compnerd, majnemer, rjmccall, rnk.
We're implementing funclet-compatible code generation for Obj-C
exceptions when using the MSVC ABI. The idea is that the Obj-C runtime
will wrap Obj-C exceptions inside C++ exceptions, which allows for
interoperability with C++ exceptions (for Obj-C++) and zero-cost
exceptions. This is the approach taken by e.g. WinObjC, and I believe it
to be the best approach for Obj-C exceptions in the MSVC ABI.
This change implements emitting the actual funclet-compatible IR. The
generic exceptions codegen already takes care of emitting the proper
catch dispatch structures, but we need to ensure proper handling of
catch parameters and scoping (emitting the catchret). Finally blocks are
handled quite differently from Itanium; they're expected to be outlined
by the frontend, which limits some control flow possibilities but also
greatly simplifies their codegen. See r334251 for further discussion of
why frontend outlining is used.
Worked on with Saleem Abdulrasool <compnerd at compnerd.org>.
Repository:
rC Clang
https://reviews.llvm.org/D47988
Files:
lib/CodeGen/CGCXXABI.h
lib/CodeGen/CGException.cpp
lib/CodeGen/CGObjCGNU.cpp
lib/CodeGen/CGObjCMac.cpp
lib/CodeGen/CGObjCRuntime.cpp
lib/CodeGen/CGStmt.cpp
lib/CodeGen/CodeGenFunction.h
lib/CodeGen/MicrosoftCXXABI.cpp
test/CodeGenObjC/catch-lexical-block.m
test/CodeGenObjC/exceptions-msvc.m
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D47988.150640.patch
Type: text/x-patch
Size: 41047 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180609/bd0b710e/attachment-0001.bin>
More information about the cfe-commits
mailing list