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

Kim Gräsman kim.grasman at gmail.com
Mon Jul 13 06:27:15 PDT 2015


I'm not sure what I think :-)

In IWYU, I added startup code to initalize only the X86 target info,
not all of them:
https://github.com/include-what-you-use/include-what-you-use/blob/master/iwyu.cc#L3817

I'm not sure if that's better in any measurable way.

I think your approach sounds useful, but it's not a great default mode
for tools since they occasionally *do* want to look inside MS inline
asm (we haven't bothered yet, but we could look for uses inside inline
asm, for example).

It'd be nice to be able to pass such a flag, though, if your tool
hasn't been built with X86 target info but you still want to process
code with MS inline assembly.

FWIW,
- Kim

On Mon, Jul 13, 2015 at 3:07 PM, Nikola Smiljanic <popizdeh at gmail.com> wrote:
> Adding Kim as I think he's had to deal with this in IWYU.
>
> On Mon, Jul 13, 2015 at 11:01 PM, Nikola Smiljanic <popizdeh at gmail.com>
> wrote:
>>
>> Sorry for hijacking this thread. I was looking into this issue few months
>> ago and Reid suggested allowing tools to recover from partial AST in this
>> case. I wanted to add a flag -fskip-inline-asm or something along those
>> lines that would enable tools not to choke on code like this (some x86
>> windows system header files have inline asm). What do others think?
>>
>> On Mon, Jul 13, 2015 at 10:38 PM, Han Wang <wanghan02 at gmail.com> wrote:
>>>
>>> Thanks Ben,
>>>
>>> The initialisations do work! Thank you very much.
>>>
>>> I still have 1 question. What are the differences between these 2 forms?
>>>
>>> 1. use clang to compile a file: clang++ -c test.cpp
>>> 2. use clang tooling to parse a file ./foo.out test.cpp -- clang++ -c
>>> test.cpp
>>>
>>> Best regards,
>>> Han
>>>
>>> On Mon, Jul 13, 2015 at 2:02 PM, Benjamin Kramer <benny.kra at gmail.com>
>>> wrote:
>>>>
>>>> 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
>>>
>>>
>>>
>>> _______________________________________________
>>> cfe-dev mailing list
>>> cfe-dev at cs.uiuc.edu
>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev
>>>
>>
>



More information about the cfe-dev mailing list