diff options
author | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-03-26 19:25:01 +0000 |
---|---|---|
committer | Sanjoy Das <sanjoy@playingwithpointers.com> | 2015-03-26 19:25:01 +0000 |
commit | 8ce6499bdd80529ca602405ad406804c090d76ce (patch) | |
tree | eeb94943df6aaacd51d0569df39c5ccab6a472fa /llvm/docs/ProgrammersManual.rst | |
parent | 54dd7df1c086f8484263d3b03f1885d7ba7a07ab (diff) | |
download | bcm5719-llvm-8ce6499bdd80529ca602405ad406804c090d76ce.tar.gz bcm5719-llvm-8ce6499bdd80529ca602405ad406804c090d76ce.zip |
[ADT][CMake][AutoConf] Fail-fast iterators for DenseMap
Summary:
This patch is an attempt at making `DenseMapIterator`s "fail-fast".
Fail-fast iterators that have been invalidated due to insertion into
the host `DenseMap` deterministically trip an assert (in debug mode)
on access, instead of non-deterministically hitting memory corruption
issues.
Enabling fail-fast iterators breaks the LLVM C++ ABI, so they are
predicated on `LLVM_ENABLE_ABI_BREAKING_CHECKS`.
`LLVM_ENABLE_ABI_BREAKING_CHECKS` by default flips with
`LLVM_ENABLE_ASSERTS`, but can be clamped to ON or OFF using the CMake /
autoconf build system.
Reviewers: chandlerc, dexonsmith, rnk, zturner
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D8351
llvm-svn: 233310
Diffstat (limited to 'llvm/docs/ProgrammersManual.rst')
-rw-r--r-- | llvm/docs/ProgrammersManual.rst | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/llvm/docs/ProgrammersManual.rst b/llvm/docs/ProgrammersManual.rst index 3b05280fb16..2c7e4a9954a 100644 --- a/llvm/docs/ProgrammersManual.rst +++ b/llvm/docs/ProgrammersManual.rst @@ -2553,6 +2553,22 @@ section on :ref:`isa and dyn_cast <isa>` and our :doc:`detailed document <HowToSetUpLLVMStyleRTTI>` which describes how you can implement this pattern for use with the LLVM helpers. +.. _abi_breaking_checks: + +ABI Breaking Checks +------------------- + +Checks and asserts that alter the LLVM C++ ABI are predicated on the +preprocessor symbol `LLVM_ENABLE_ABI_BREAKING_CHECKS` -- LLVM +libraries built with `LLVM_ENABLE_ABI_BREAKING_CHECKS` are not ABI +compatible LLVM libraries built without it defined. By default, +turning on assertions also turns on `LLVM_ENABLE_ABI_BREAKING_CHECKS` +so a default +Asserts build is not ABI compatible with a +default -Asserts build. Clients that want ABI compatibility +between +Asserts and -Asserts builds should use the CMake or autoconf +build systems to set `LLVM_ENABLE_ABI_BREAKING_CHECKS` independently +of `LLVM_ENABLE_ASSERTIONS`. + .. _coreclasses: The Core LLVM Class Hierarchy Reference |