[cfe-dev] Error parsing files with AST Matcher tool

Benjamin Kramer benny.kra at gmail.com
Mon Jul 13 05:02:53 PDT 2015


On Mon, Jul 13, 2015 at 12:20 PM, Han Wang <wanghan02 at gmail.com> wrote:
> Hi,
>
> I have a simple file containing some Microsoft style inline asm. I can
> compile this file with -fms-extensions.
>
> clang++ -fms-extensions -c test.cpp
>
> No problem for this.
>
> But when I write a simple AST Matcher tool (foo.out) to parse this file, I
> got errors.
>
> ./foo.out test.cpp -- clang++ -fms-extensions -c test.cpp
> test.cpp:19:3: error: MS-style inline assembly is not available: Unable to
> find target for this triple (no targets are registered)
>   __asm {
>   ^
> test.cpp:28:3: error: MS-style inline assembly is not available: Unable to
> find target for this triple (no targets are registered)
>   __asm mov a1, 2
>   ^
> 2 errors generated.
> Error while processing test.cpp.

This is most likely due to missing target initialization in your tool.
MS-style asm is special as it has to be parsed by clang, requiring
target support. GCC-style asm is parsed much later.

Solving it should be as simple as putting

llvm::InitializeAllTargets();
llvm::InitializeAllTargetMCs();
llvm::InitializeAllAsmPrinters();
llvm::InitializeAllAsmParsers();

in your main() function (or wherever the rest of clang is initialized).

> There are also some other problems when parsing test.cpp. For example if I
> #include <string>, I have to use -- clang++ -I<path-to-string> to identify
> the system header file path. I'm not sure what makes it different then the
> normal clang compile.

Mainline clang doesn't use headers from xcode.app. The easiest way
around that is just checking out libc++ into your LLVM tree.

- Ben



More information about the cfe-dev mailing list