| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
-std=c++0x. Patch by Ahmed Charles!
llvm-svn: 141900
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
This model uses the 'landingpad' instruction, which is pinned to the top of the
landing pad. (A landing pad is defined as the destination of the unwind branch
of an invoke instruction.) All of the information needed to generate the correct
exception handling metadata during code generation is encoded into the
landingpad instruction.
The new 'resume' instruction takes the place of the llvm.eh.resume intrinsic
call. It's lowered in much the same way as the intrinsic is.
llvm-svn: 140049
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
hierarchy of delegation, and that EH selector values are meaningful
function-wide (good thing, too, or inlining wouldn't work).
2,3d
1a
hierarchy of delegation and that EH selector values have the same
meaning everywhere in the function instead of being meaningful only
in the context of a specific selector.
This removes the need for routing edges through EH cleanups,
since a cleanup simply always branches to its enclosing scope.
llvm-svn: 137293
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
aren't actually going to make a normal cleanup for. Sometimes
we optimistically create branches to such blocks for fixups,
and then we resolve the fixup to somewhere within the cleanup's
scope, and then the cleanup is actually not reachable for some
reason. The process of resolving the fixup leaves us with
switches whose default edge leads to the cleanup; we can
replace that with unreachable, then (in many cases) turn
the switch into an unconditional branch.
Fixes PR10467.
llvm-svn: 137011
|
| |
|
|
| |
llvm-svn: 134831
|
| |
|
|
|
|
| |
It's quite likely that this will explode, but I need to know how. :)
llvm-svn: 132269
|
| |
|
|
| |
llvm-svn: 132219
|
| |
|
|
|
|
|
|
| |
to be careful to emit landing pads that are always prepared to handle a
cleanup path. This is correct mostly because of the fix to the LLVM
inliner, r132200.
llvm-svn: 132209
|
| |
|
|
|
|
| |
for destructors until the class is complete and destructors have been adjusted.
llvm-svn: 131632
|
| |
|
|
|
|
| |
other things, libcxx not building.
llvm-svn: 131573
|
| |
|
|
| |
llvm-svn: 131528
|
| |
|
|
| |
llvm-svn: 126599
|
| |
|
|
|
|
|
|
|
| |
fixing a crash which probably nobody was ever going to see. In doing so,
fix a horrendous number of problems with the conditional-cleanups code.
Also, make conditional cleanups re-use the cleanup's activation variable,
which avoids some unfortunate repetitiveness.
llvm-svn: 124481
|
| |
|
|
| |
llvm-svn: 124210
|
| |
|
|
| |
llvm-svn: 123197
|
| |
|
|
|
|
|
|
|
| |
enclosing normal cleanup, not the top of the EH stack. I'm *really*
surprised this hasn't been causing more problems.
Fixes rdar://problem/8231514.
llvm-svn: 109569
|
| |
|
|
|
|
| |
I knew this code duplication would bite me.
llvm-svn: 109463
|
| |
|
|
|
|
|
| |
as well as some significant asymptotic inefficiencies with threading
multiple jumps through deep cleanups.
llvm-svn: 109274
|
| |
|
|
|
|
| |
Fixes <rdar://problem/8212123>.
llvm-svn: 108944
|
| |
|
|
|
|
|
| |
or a catch of a record type by value or reference. Also convert this to a
lazy cleanup.
llvm-svn: 108287
|
| |
|
|
| |
llvm-svn: 108276
|
| |
|
|
|
|
| |
rethrow. Fixes rdar://problem/7696603
llvm-svn: 107757
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
self-host. Hopefully these results hold up on different platforms.
I tried to keep the GNU ObjC runtime happy, but it's hard for me to test.
Reimplement how clang generates IR for exceptions. Instead of creating new
invoke destinations which sequentially chain to the previous destination,
push a more semantic representation of *why* we need the cleanup/catch/filter
behavior, then collect that information into a single landing pad upon request.
Also reorganizes how normal cleanups (i.e. cleanups triggered by non-exceptional
control flow) are generated, since it's actually fairly closely tied in with
the former. Remove the need to track which cleanup scope a block is associated
with.
Document a lot of previously poorly-understood (by me, at least) behavior.
The new framework implements the Horrible Hack (tm), which requires every
landing pad to have a catch-all so that inlining will work. Clang no longer
requires the Horrible Hack just to make exceptions flow correctly within
a function, however. The HH is an unfortunate requirement of LLVM's EH IR.
llvm-svn: 107631
|
| |
|
|
|
|
| |
makes it impossible to check labels.
llvm-svn: 102048
|
| |
|
|
|
|
|
|
|
| |
in a throw expression. Use EmitAnyExprToMem to emit the throw expression,
which magically elides the final copy-constructor call (which raises a new
strict-compliance bug, but baby steps). Give __cxa_throw a destructor pointer
if the exception type has a non-trivial destructor.
llvm-svn: 102039
|
| |
|
|
|
|
| |
field to memcpy, memmove, and memset.
llvm-svn: 100305
|
| |
|
|
| |
llvm-svn: 100200
|
| |
|
|
|
|
| |
field to memcpy, memmove, and memset.
llvm-svn: 100193
|
| |
|
|
| |
llvm-svn: 99949
|
| |
|
|
|
|
| |
memmove, and memset
llvm-svn: 99930
|
| |
|
|
| |
llvm-svn: 93353
|
| |
|
|
|
|
|
|
|
| |
- This is designed to make it obvious that %clang_cc1 is a "test variable"
which is substituted. It is '%clang_cc1' instead of '%clang -cc1' because it
can be useful to redefine what gets run as 'clang -cc1' (for example, to set
a default target).
llvm-svn: 91446
|
| |
|
|
|
|
|
|
| |
sure to stash away the exception pointer somewhere.
This fixes an "Instruction does not dominate all uses!" verification error when compiling TableGen.
llvm-svn: 91084
|
| |
|
|
| |
llvm-svn: 90994
|
|
|
llvm-svn: 89469
|