<div dir="ltr">Hi Folkert,<div><br></div><div>getName() should work for namedDecl only; to get type names, you need to work differently.</div><div><br></div><div>I suggest you have a look at:</div><div><br></div><div><a href="http://clang.llvm.org/doxygen/TypePrinter_8cpp_source.html">http://clang.llvm.org/doxygen/TypePrinter_8cpp_source.html</a><br></div><div><a href="http://clang.llvm.org/doxygen/ASTDumper_8cpp_source.html">http://clang.llvm.org/doxygen/ASTDumper_8cpp_source.html</a><br></div><div><a href="http://clang.llvm.org/doxygen/StmtDumper_8cpp_source.html">http://clang.llvm.org/doxygen/StmtDumper_8cpp_source.html</a><br></div><div><br></div><div>They print/dump the AST. I would say it's the best place to look (and reimplement) to print a xml.</div><div><br></div><div>Thanks,</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016-07-15 10:06 GMT+01:00 folkert <span dir="ltr"><<a href="mailto:folkert@vanheusden.com" target="_blank">folkert@vanheusden.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Mikhail,<br>
<br>
Thanks.<br>
Problem with getName() is that it does not exist for too many types.<br>
For example when I have a QualType that I would like to get as a string,<br>
then the doxygen says there's a getAstString static function but in<br>
reality it is not there. There's also no getName() for QualType. Then<br>
there's the split() method but the object that comes out of it also has<br>
no tostring or something that emits an enum or something.<br>
<br>
What I'm trying to do is create a tool which emits an xml of the ast.<br>
A bit like the one which was included.<br>
<span class=""><br>
On Thu, Jul 14, 2016 at 03:38:41PM +0100, Mikhail Ramalho wrote:<br>
> In ESBMC [0], we use:<br>
><br>
> -lclangTooling -lclangDriver -lclangFrontend -lclangParse<br>
> -lclangSerialization -lclangSema -lclangAnalysis -lclangEdit -lclangLex<br>
> -lclangAST -lclangBasic -lLLVMBitReader -lLLVMCore -lLLVMOption<br>
> -lLLVMMCParser -lLLVMMC -lLLVMSupport -lrt -ldl -lpthread -lz -lm<br>
><br>
> For clang, we have to manually write the libs, but for llvm we simply use<br>
> llvm-config, you can check the scripts for clang's libs [1] and llvm [2].<br>
><br>
> ~<br>
><br>
> But as a suggestion, I would not rely on getNameAsString, as it is<br>
</span>> deprecated for quite a while. Try changing to *getName().str()* and it<br>
<div><div class="h5">> should work for any C declaration (I'm not completely sure about that,<br>
> though). For C++ declarations (specially constructors and destructors), I<br>
> use the following method:<br>
><br>
> std::string clang_c_convertert::get_decl_name(<br>
>   const clang::NamedDecl &decl)<br>
> {<br>
>   if(const clang::IdentifierInfo *identifier = decl.getIdentifier())<br>
>     return identifier->getName().str();<br>
><br>
>   std::string name;<br>
>   llvm::raw_string_ostream rso(name);<br>
>   decl.printName(rso);<br>
>   return rso.str();<br>
> }<br>
><br>
> It shoudl work for any C or C++ declaration.<br>
><br>
> Thank you,<br>
><br>
> [0] <a href="https://github.com/esbmc/esbmc" rel="noreferrer" target="_blank">https://github.com/esbmc/esbmc</a><br>
> [1]<br>
> <a href="https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_clang.m4" rel="noreferrer" target="_blank">https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_clang.m4</a><br>
> [2]<br>
> <a href="https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_llvm.m4" rel="noreferrer" target="_blank">https://github.com/esbmc/esbmc/blob/master/scripts/build-aux/m4/ax_llvm.m4</a><br>
><br>
><br>
> 2016-07-14 15:12 GMT+01:00 folkert via cfe-users <<a href="mailto:cfe-users@lists.llvm.org">cfe-users@lists.llvm.org</a>>:<br>
><br>
> > Hi,<br>
> ><br>
> > What is the order of the clang libraries when linking?<br>
> ><br>
> > Currently I'm doing:<br>
> ><br>
> > clang++ -fno-rtti `llvm-config --cxxflags` \<br>
> >         iterate.cpp \<br>
> >         `llvm-config --ldflags --libs --system-libs` \<br>
> >         -I/usr/lib/llvm-3.8/include -ggdb3 -std=c++11<br>
> > -I/usr/include/llvm-3.8/llvm/Support -L/usr/lib/llvm-3.8/lib/<br>
> > -L/usr/lib/gcc/x86_64-linux-gnu/5/ -I/usr/include/c++/5/<br>
> > -I/usr/include/x86_64-linux-gnu/c++/5/ -I/usr/lib/llvm-3.8/include/ \<br>
> >         -lclangTooling -lclangFrontend -lclangDriver -lclangSerialization<br>
> > -lclangParse -lclangSema -lclangAnalysis -lclangEdit -lclangAST -lclangLex<br>
> > -lclangBasic -lLLVM -ldl<br>
> ><br>
> > but this gives me:<br>
> ><br>
> > /tmp/iterate-66d196.o: In function `getNameAsString':<br>
> > /usr/lib/llvm-3.8/include/clang/AST/Decl.h:184: undefined reference to<br>
> > `clang::DeclarationName::getAsString() const'<br>
> ><br>
> > Thanks in advance.<br>
> ><br>
> ><br>
> > Folkert van Heusden<br>
> ><br>
> > --<br>
> > ----------------------------------------------------------------------<br>
> > Phone: +31-6-41278122, PGP-key: 1F28D8AE, <a href="http://www.vanheusden.com" rel="noreferrer" target="_blank">www.vanheusden.com</a><br>
> > _______________________________________________<br>
> > cfe-users mailing list<br>
> > <a href="mailto:cfe-users@lists.llvm.org">cfe-users@lists.llvm.org</a><br>
> > <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users</a><br>
> ><br>
><br>
><br>
><br>
> --<br>
><br>
> Mikhail Ramalho.<br>
<br>
<br>
</div></div>Folkert van Heusden<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
MultiTail è uno flexible tool per seguire di logfiles e effettuazione<br>
di commissioni. Feltrare, provedere da colore, merge, 'diff-view',<br>
etc. <a href="http://www.vanheusden.com/multitail/" rel="noreferrer" target="_blank">http://www.vanheusden.com/multitail/</a><br>
</font></span><div class="HOEnZb"><div class="h5">----------------------------------------------------------------------<br>
Phone: <a href="tel:%2B31-6-41278122" value="+31641278122">+31-6-41278122</a>, PGP-key: 1F28D8AE, <a href="http://www.vanheusden.com" rel="noreferrer" target="_blank">www.vanheusden.com</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><br></div><div>Mikhail Ramalho.</div></div></div>
</div>