<br><br><div class="gmail_quote">On Mon, Jul 16, 2012 at 7:44 PM, Alexander Kornienko <span dir="ltr"><<a href="mailto:alexfh@google.com" target="_blank">alexfh@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>Hi all,</div><div><br></div><div>I've recently implemented a tool named clang-ast-dump, which allows to dump selectively an AST of user-specified translation units. It's a really simple tool now, most of it's code is node filtering. The rest is done by <font face="courier new, monospace">Decl::dumpXML</font>.</div>


<div><br></div><div>Now the problem: Decl::dumpXML does nothing when compiled with -DNDEBUG. I assume that initially this method was meant to be only helpful during debugging of clang code, but now there are a couple of reasons to review this decision, I think:</div>

<div>  * clang -cc1 mode has a command line option "<font face="courier new, monospace">-ast-dump-xml</font>", which uses <font face="courier new, monospace">dumpXML</font>, and currently it won't work with <font face="courier new, monospace">-DNDEBUG</font> (e.g. when builing with CMake: Release configuration + <font face="courier new, monospace">LLVM_ASSERTIONS_ENABLED=OFF</font>);</div>

<div>  * clang-ast-dump tool uses it.</div><div><br></div><div>A comment in <font face="courier new, monospace"><b>DumpXML.cpp</b></font> states:</div><div><span style="color:rgb(136,0,0);font-family:monospace;font-size:medium;line-height:16.25px;white-space:pre-wrap">// Only pay for this in code size in assertions-enabled builds.</span><br>

</div><div><br></div><div>But having <font face="courier new, monospace">-ast-dump-xml</font> option conflicts with this idea: either we have to disable this option completely in non-assertion-enabled builds, or we have to drop this idea of not-having the <font face="courier new, monospace">dumpXML</font> implementation in them. The third option would be to drop the <font face="courier new, monospace">-ast-dump-xml</font> option completely and instead use <font face="courier new, monospace">clang-ast-dump</font> tool when needed. In this case we could only use an implementation of <font face="courier new, monospace">Decl::dumpXML</font> in the tool and exclude it from clang binary.</div>
<span class="HOEnZb"><font color="#888888">
<div><br></div>-- <div>Regards,</div><div>Alexander Kornienko </div>
</font></span><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>I think the latter solution (separate tool) would perhaps make the most sense. It seems to me that we get the best of both worlds: a lean compiler and a verbose (and possibly richer and richer) tool for debugging.<br>
<br>If the tool had been maintained on a separate repository, the question of bitrot would have risen, however if we speak about a tool maintained within the clang repository (albeit a dedicated directory) then we can have the build bots verifying that it compiles and its test-suite pass so that modifications on the AST are propagated.<br>
<br>-- Matthieu<br>