<div dir="ltr"><div dir="ltr">On Tue, 21 Apr 2020 at 05:41, Dr S3curity via cfe-users <<a href="mailto:cfe-users@lists.llvm.org">cfe-users@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>Imagine the very basic code below, it has some missing elements, we dont have the foo() function and MyClass class,</div><div><br></div><div>```test.cpp</div><div>int main(int argc, char *argv[])<br>{<br>    MyClass* mc = new MyClass();<br>    mc.get_count();<br>    foo(1, 2, 3);<br>    std::cout << "this is a test" << endl;<br>}<br></div><div>```</div><div><br></div><div>How can I get AST for that code?</div><div>I tried `clang -Xclang -ast-dump -fsyntax-only test.cpp`, I can get the AST tree but without MyClass and foo() function, it doesn't even say foo is a function with 3 integer parameters.</div><div><br></div><div>This can be problematic for different cases for example IDE's where you dont have all the project dependencies but yet you need to know what are the elements in your code.</div><div><br></div><div>Is that possible to do with libclang? Any other suggestions are welcome.</div></div></blockquote><div><br></div><div>You can request that more invalid portions of the AST are retained by using `-Xclang -frecovery-ast`. In this case, that will preserve the function call expression as a RecoveryExpr. For now at least, we don't have the ability to preserve AST information for the invalid "new MyClass" nor the expression using of undeclared "std::cout" and "endl", but -frecovery-ast is expected to improve over time to retain more such AST nodes. (And perhaps eventually it will be enabled by default, at which point the flag for it might disappear. We don't guarantee any forward compatibility with -Xclang flags.)</div></div></div>