Skip to content

Commit

Permalink
[LangRef] Explicitly allow readnone and reaodnly functions to unwind
Browse files Browse the repository at this point in the history
Summary:
This change edits the language reference to explicitly allow the
existence of readnone and readonly functions that can throw.  Full
discussion at
http://lists.llvm.org/pipermail/llvm-dev/2017-January/108637.html

Reviewers: dberlin, chandlerc, hfinkel, majnemer

Reviewed By: majnemer

Subscribers: majnemer, mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D28740

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@295000 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
sanjoy committed Feb 13, 2017
1 parent c812cd6 commit 6980b10
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions docs/LangRef.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1474,8 +1474,10 @@ example:
any mutable state (e.g. memory, control registers, etc) visible to
caller functions. It does not write through any pointer arguments
(including ``byval`` arguments) and never changes any state visible
to callers. This means that it cannot unwind exceptions by calling
the ``C++`` exception throwing methods.
to callers. This means while it cannot unwind exceptions by calling
the ``C++`` exception throwing methods (since they write to memory), there may
be non-``C++`` mechanisms that throw exceptions without writing to LLVM
visible memory.

On an argument, this attribute indicates that the function does not
dereference that pointer argument, even though it may read or write the
Expand All @@ -1487,9 +1489,10 @@ example:
caller functions. It may dereference pointer arguments and read
state that may be set in the caller. A readonly function always
returns the same value (or unwinds an exception identically) when
called with the same set of arguments and global state. It cannot
unwind an exception by calling the ``C++`` exception throwing
methods.
called with the same set of arguments and global state. This means while it
cannot unwind exceptions by calling the ``C++`` exception throwing methods
(since they write to memory), there may be non-``C++`` mechanisms that throw
exceptions without writing to LLVM visible memory.

On an argument, this attribute indicates that the function does not write
through this pointer argument, even though it may write to the memory that
Expand Down

0 comments on commit 6980b10

Please sign in to comment.