[PATCH] [ADT][CMake][AutoConf] fail-fast iterators for DenseMap
David Blaikie
dblaikie at gmail.com
Mon Mar 16 09:09:20 PDT 2015
On Mon, Mar 16, 2015 at 9:03 AM, Zachary Turner <zturner at google.com> wrote:
> If I understand correctly, this broke before because LLDB would redefine
> _NDEBUG sometimes, but not other times when including clang headers.
>
> Now, since this isn't based on _NDEBUG, this is no longer an issue. If so,
> looks good to me.
Ah, right right - thanks for explaining/reminding me.
>
> On Mon, Mar 16, 2015 at 8:35 AM David Blaikie <dblaikie at gmail.com> wrote:
>
>> On Sun, Mar 15, 2015 at 10:48 PM, Sanjoy Das <
>> sanjoy at playingwithpointers.com> wrote:
>>
>>> Hi chandlerc, dexonsmith, rnk, zturner,
>>>
>>> This is a re-do of D7931 with the following changes:
>>>
>>> * the `EpochTracker` class is now conditional on
>>> `LLVM_ENABLE_FAIL_FAST_ITERATORS` and not `NDEBUG`.
>>>
>>
>> It'd be nice to have a more general conditional name so we can add other
>> ABI-breaking debug checks under the same flag. (strawman:
>> LLVM_ABI_BREAKING_DEBUG ?)
>>
>>
>>>
>>> * **The most significant change**: `LLVM_ENABLE_FAIL_FAST_ITERATORS`
>>> can be forced to be set or unset independent of `NDEBUG`. By
>>> default, cmake and autoconf set it (thus enabling fail-fast
>>> iterators) for with-asserts builds and unset it for without-asserts
>>> builds.
>>>
>>
>> *fingers crossed that this is sufficient for other users* (that they're
>> willing to manually unset this value for their debug builds if they need
>> ABI compatibility)
>>
>>
>>>
>>> With these changes, projects that require ABI compatibility between
>>> `defined(NDEBUG)` builds and `!defined(NDEBUG)` builds can get that by
>>> clamping `LLVM_ENABLE_FAIL_FAST_ITERATORS` to on or off.
>>>
>>> == Minor changes from D7931 ==
>>>
>>> * `HandleBase::getEpochAddress` returns a `void *` to emphasise that
>>> the result is for comparison, not derefernecing.
>>>
>>> * `HandleBase::getEpochAddress` was missing in the fail-fast-disabled
>>> version of `HandleBase`. This was not a problem earlier since the
>>> function is only called from `assert`s and when `assert`s were
>>> enabled, we'd always choose the fail-fast-enabled version of
>>> `HandleBase`. Since this is no longer the case (a with-asserts
>>> build may be using the fail-fast-disabled version of `HandleBase`),
>>> the missing method shows up as an obvious compiler error.
>>>
>>> Original summary for D7931:
>>> 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.
>>>
>>> http://reviews.llvm.org/D8351
>>>
>>> Files:
>>> CMakeLists.txt
>>> Makefile.config.in
>>> Makefile.rules
>>> autoconf/configure.ac
>>> cmake/modules/HandleLLVMOptions.cmake
>>> configure
>>> docs/CMake.rst
>>> include/llvm/ADT/DenseMap.h
>>> include/llvm/ADT/EpochTracker.h
>>>
>>> EMAIL PREFERENCES
>>> http://reviews.llvm.org/settings/panel/emailpreferences/
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>>
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150316/087fd3e3/attachment.html>
More information about the llvm-commits
mailing list