On Thu, Jul 28, 2011 at 1:29 PM, Chris Lattner <span dir="ltr"><<a href="mailto:clattner@apple.com">clattner@apple.com</a>></span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div style="word-wrap:break-word"><div class="im"><div><div>On Jul 28, 2011, at 12:07 PM, Talin wrote:</div><blockquote type="cite"><span style="border-collapse:separate;font-family:Helvetica;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"><blockquote class="gmail_quote" style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0.8ex;border-left-width:1px;border-left-color:rgb(204, 204, 204);border-left-style:solid;padding-left:1ex">

<div style="word-wrap:break-word"><div><div><blockquote type="cite"><span style="border-collapse:separate;font-family:Helvetica;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;font-size:medium"><div>

<div><div>Because the stream is a raw_ostream, LLVM types and values can easily be printed to the stream without having to convert them to string form.</div></div></div></span></blockquote><br></div></div><div>I'm unconvinced that this is worth it at all.  This is only going to allow you to "avoid going into the debugger" in the most trivial cases.</div>

<div><br></div></div></blockquote><div>Question - are you opposed to having a general "assertion with streamed arguments" facility in llvm/Support at all, or are you merely opposed to the work involved in replacing the existing assertions en-masse? If it's the latter, I'll make you a deal - every time I get an assert that I don't think gives me enough information, I'll send a patch to improve it. But that can only happen if the general mechanism is in place first. And I'd use that general mechanism in my own code regardless of whether it's used in LLVM or not.</div>

</span></blockquote><br></div></div><div>First, I don't see a problem here.  "assert" is a standard C feature, and I consider it to be good enough.  "Good enough" is defined as being a debugging aid for trapping and enforcing preconditions that can be disabled in a production build of the code.</div>

<div><br></div><div>I don't like the suggestions proposed for a few reasons:</div><div><br></div><div>1. Introducing weird macros for assertion checking is another barrier to learning the code, therefore they should either be really obvious or provide significant-enough value to make them worth the barrier.</div>

<div><br></div><div>2. I don't see the goal of assertions to make it so you don't have to debug problems in a debugger.  If that's the value of any change here, then I don't see it being worth the cost.</div>

<div><br></div><div>3. I don't want to bloat production builds with raw ostream stuff.  This can be solved depending on how the macro is designed, I'm just sayin'. :)</div><div><br></div><div>Custom assertion macros are nothing new, there is a reason LLVM hasn't used them until now.</div>

</div></blockquote><div><br></div><div>Understood. Here's my final word on the matter: From the perspective of a user of LLVM's APIs, assertions are the primary feedback mechanism that tell me whether I am using those APIs correctly. In the time I've been using LLVM, I've made hundreds if not thousands of errors - from various causes ranging from simple typos to of misunderstanding the documentation. (As part of migrating my frontend to the new type system, I've encountered about a dozen assertion failures, most of which were quite easy to diagnose once I knew what type was involved.) Most of the time an assertion failure is the first signal that I've done something wrong. Unfortunately, "something went wrong" is about all the information I typically get from an assertion failure.</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div style="word-wrap:break-word"><div><br></div><font color="#888888"><div>-Chris</div></font></div></blockquote>

</div><br><br clear="all"><br>-- <br>-- Talin<br>