<div dir="ltr">A separate define seems like the best we can do. The downside is that we can't turn this on by default in a standard +Asserts build, or we've just moved the ABI incompatibility problem to a different define.<div><br></div><div>We've also had the EXPENSIVE_CHECKS macro for a while. You could throw it under there. It should probably be renamed LLVM_EXPENSIVE_CHECKS or something.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Mar 4, 2015 at 2:23 PM, Sanjoy Das <span dir="ltr"><<a href="mailto:sanjoy@playingwithpointers.com" target="_blank">sanjoy@playingwithpointers.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">What do you think about having a separate<br>
LLVM_ENABLE_FAIL_FAST_ITERATORS macro?  That will be independent of<br>
NDEBUG and will be explicitly documented to change ABI compatibility<br>
of data structures.  This way LLDB can always (or never) build llvm<br>
with LLVM_ENABLE_FAIL_FAST_ITERATORS and enable / disable the macro<br>
when building LLDB sources consistently.  Doing this could be easier<br>
than being consistent with NDEBUG.  This approach adds more complexity<br>
on the LLVM side though, and I'd rather not do it if LLDB can be made<br>
to be consistent on when it #defines NDEBUG.<br>
<span class="HOEnZb"><font color="#888888"><br>
-- Sanjoy<br>
</font></span></blockquote></div><br></div>