<div dir="ltr"><div class="gmail_extra"><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>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="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">#if LLVM_ENABLE_DUMP</span><br></div><div class="gmail_extra"><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
  void some_helper_function_only_used_by_dump() const;</div><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">  LLVM_DUMP_METHOD void dump() const;</div><div style="color:rgb(0,0,0);font-family:arial,sans-serif;font-size:13px">
#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>