Skip to content

Commit

Permalink
Address Reid's review feedback.
Browse files Browse the repository at this point in the history
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241889 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
majnemer committed Jul 10, 2015
1 parent 751c4be commit a5d05b7
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 22 deletions.
25 changes: 13 additions & 12 deletions docs/LangRef.rst
Original file line number Diff line number Diff line change
Expand Up @@ -5183,15 +5183,15 @@ none of the ``catchblock`` instructions are suitable for catching the
in-flight exception.

If a ``nextaction`` label is not present, the instruction unwinds out of
the function it is located in. The
:ref:`personality function <personalityfn>` will look for an appropriate
catch block in the caller.
its parent function. The
:ref:`personality function <personalityfn>` will continue processing
exception handling actions in the caller.

Arguments:
""""""""""

The instruction optionally takes a label, ``nextaction``, indicating
where control should transfer to if none of the constituent
where control should transfer to if none of the preceding
``catchblock`` instructions are suitable for the in-flight exception.

Semantics:
Expand All @@ -5212,6 +5212,7 @@ The ``catchendblock`` instruction has several restrictions:
catch block.
- A basic block that is not a catch-end block may not include a
'``catchendblock``' instruction.
- Exactly one catch block may unwind to a ``catchendblock``.

Example:
""""""""
Expand Down Expand Up @@ -5251,7 +5252,7 @@ Semantics:

The '``catchret``' instruction ends the existing (in-flight) exception
whose unwinding was interrupted with a
:ref:`catchblock <i_catchblock>` instruction and transfer control to
:ref:`catchblock <i_catchblock>` instruction and transfers control to
``normal``.

Example:
Expand Down Expand Up @@ -5301,6 +5302,7 @@ Example:

.. code-block:: llvm
cleanupret void unwind to caller
cleanupret { i8*, i32 } %exn unwind label %continue
.. _i_terminateblock:
Expand All @@ -5314,29 +5316,28 @@ Syntax:
::

terminateblock [<args>*] unwind label <exception label>
terminateblock [<args>*] unwind to caller

Overview:
"""""""""

The '``terminateblock``' instruction is used by `LLVM's exception handling
system <ExceptionHandling.html#overview>`_ to specify that a basic block
is a terminate block --- one where a personality routine attempts to transfer
control to terminate the program.
is a terminate block --- one where a personality routine may decide to
terminate the program.
The ``args`` correspond to whatever information the personality
routine requires to know if this is an appropriate place to terminate the
program. Control is tranfered to the ``exception`` label if the
``terminateblock`` is an appropriate handler for the in-flight exception.
If the ``terminateblock`` is not an appropriate handler, execution of
the program is terminated via
:ref:`personality function <personalityfn>` specific means.
personality routine decides not to terminate the program for the
in-flight exception.

Arguments:
""""""""""

The instruction takes a list of arbitrary values which are interpreted
by the :ref:`personality function <personalityfn>`.

The ``terminateblock`` must be provided an ``exception`` label to
The ``terminateblock`` may be given an ``exception`` label to
transfer control to if the in-flight exception matches the ``args``.

Semantics:
Expand Down
4 changes: 2 additions & 2 deletions lib/IR/Verifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2408,8 +2408,8 @@ void Verifier::visitCallInst(CallInst &CI) {
void Verifier::visitInvokeInst(InvokeInst &II) {
VerifyCallSite(&II);

// Verify that there is an exception block instruction is the first non-PHI
// instruction of the 'unwind' destination.
// Verify that the first non-PHI instruction of the unwind destination is an
// exception handling instruction.
Assert(
II.getUnwindDest()->isEHBlock(),
"The unwind destination does not have an exception handling instruction!",
Expand Down
20 changes: 12 additions & 8 deletions lib/Transforms/Instrumentation/MemorySanitizer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2654,23 +2654,27 @@ struct MemorySanitizerVisitor : public InstVisitor<MemorySanitizerVisitor> {
}

void visitCleanupBlockInst(CleanupBlockInst &I) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
if (!I.getType()->isVoidTy()) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
}
}

void visitCatchBlock(CatchBlockInst &I) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
if (!I.getType()->isVoidTy()) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
}
}

void visitTerminateBlock(TerminateBlockInst &I) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
DEBUG(dbgs() << "TerminateBlock: " << I << "\n");
// Nothing to do here.
}

void visitCatchEndBlockInst(CatchEndBlockInst &I) {
setShadow(&I, getCleanShadow(&I));
setOrigin(&I, getCleanOrigin());
DEBUG(dbgs() << "CatchEndBlock: " << I << "\n");
// Nothing to do here.
}

void visitGetElementPtrInst(GetElementPtrInst &I) {
Expand Down

0 comments on commit a5d05b7

Please sign in to comment.