I'd say an llvm macro of LLVM_ATTTRIBUTE_DEBUG_USED - if that's still too long probably abbreviate attribute to attr.<br><br><div>On Friday, December 27, 2013 4:48:59 PM, Nico Weber <<a href="mailto:thakis@chromium.org">thakis@chromium.org</a>> wrote:</div>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>r151033 and r151037 marked a few dump() methods as LLVM_ATTRIBUTE_USED, and over time this inspired marking several other dump() methods to be marked as such too (see e.g. 178400, 182186, 159790, 173548).</div>

<div><br></div><div>I understand that having the dump() methods available in the debugger is useful, but these annotations prevent the dump() methods from being dead-stripped, and they end up keeping lots of code alive. For example, clang-format depends on ASTDumper, TypePrinter, StmtVisitor and related stuff solely for these dump methods.</div>

<div><br></div><div>Since binaries now get dead-stripped, this leads to measurable bloat: clang-format goes from 1.7 MB to 1.2 MB if I remove the LLVM_ATTRIBUTE_USEDs on the 17 dump methods in include/clang – an almost 30% reduction.</div>

<div><br></div><div>Does it make sense to only mark dump methods as LLVM_ATTRIBUTE_USED if !NDEBUG? (If so, I'm thankful for naming suggestions for this new macro – LLVM_ATTRIBUTE_USED_IN_DEBUG comes to mind, but is too long. Also, should this be an LLVM macro or a clang macro?)</div>

<div><br></div><div>Thanks,</div><div>Nico</div></div>
</blockquote>