<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Jan 2, 2014 at 5:59 PM, Chandler Carruth <span dir="ltr"><<a href="mailto:chandlerc@google.com" target="_blank">chandlerc@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="im"><br><div class="gmail_quote">On Thu, Jan 2, 2014 at 8:46 PM, Philip Reames <span dir="ltr"><<a href="mailto:listmail@philipreames.com" target="_blank">listmail@philipreames.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000">I very strongly second this.  I would be in complete opposition to
    any proposal which has the effect of worsening the out-of-box
    debugging experience.<br>
    <br>
    I understand and support your desire to reduce size in Release
    builds.  Can you spell out a case for such reduction in Debug
    builds?  Maybe there's something I'm missing here.</div></blockquote></div><br></div>I'd like to re-iterate my concrete suggestion. I think that *all* of the dump methods in LLVM and Clang should be consistently defined as such:</div>

<div class="gmail_extra"><br></div><div class="gmail_extra"><span style="font-size:13px;font-family:arial,sans-serif">#if LLVM_ENABLE_DUMP</span><br></div><div class="gmail_extra"><div style="font-size:13px;font-family:arial,sans-serif">

  void some_helper_function_only_used_by_dump() const;</div><div style="font-size:13px;font-family:arial,sans-serif">  LLVM_DUMP_METHOD void dump() const;</div><div style="font-size:13px;font-family:arial,sans-serif">
#endif</div><div><br></div><div>And then I would provide the following defines in Compiler.h or whatever header seems appropriate:</div><div><br></div><div>#define LLVM_ENABLE_DUMP !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)</div>

<div>#define LLVM_DUMP_METHOD LLVM_ATTRIBUTE_NOINLINE LLVM_ATTRIBUTE_USED</div><div><br></div><div><br></div><div>This ensures that dump methods are always available in assert builds, and can be enabled explicitly in no-assert builds as needed (LLVM_ENABLE_DUMP comes from configure or cmake), and when dump methods are disabled both those methods and everything they use gets pruned out, with no warnings about unused private methods etc.</div>

<div><br></div><div>What doesn't work with this approach?</div></div></div></blockquote><div><br></div><div>I think it's a good suggestion, and it's what we should do.</div><div><br></div><div>(Not having the attribute at all seemed simpler, but the feedback is clear that that doesn't work for some folks.)</div>
<div><br></div><div>Unless someone doesn't like Chandler's suggestion (and assuming he doesn't beat me to it :-) ) I'll implement this proposal tomorrow afternoon.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>_______________________________________________<br>
cfe-dev mailing list<br>
<a href="mailto:cfe-dev@cs.uiuc.edu">cfe-dev@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev</a><br>
<br></blockquote></div><br></div></div>