[cfe-dev] Parsing VC++ headers with tool/libtooling

Luke Zarko via cfe-dev cfe-dev at lists.llvm.org
Tue Oct 27 16:52:47 PDT 2015


I'm in the process of setting up a Windows environment to reproduce/debug
this.

Are you adding --driver-mode=cl first in the arguments list, or are you
appending it to the arguments you read in from your compilation database?

Are you using response files for this compilation?

What happens if you add "-fms-compatibility" and "-fms-extensions" to the
end of the arguments list? (I'd have thought these would be implicit with
--driver-mode=cl, but maybe not.)

On Tue, Oct 27, 2015 at 12:25 AM, Manuel Klimek <klimek at google.com> wrote:

> That seems to indicate this function doesn't work for clang-cl yet. Luke,
> ideas?
>
> On Mon, Oct 26, 2015 at 7:45 PM Daniel Dilts <diltsman at gmail.com> wrote:
>
>> When I changed to second parameter to "clang-cl.exe" I get an output
>> argument list of {"clang-cl", "--driver-mode=cl", "main.cpp"}.
>>
>> When I add that additional driver to the invocation of my tool I still
>> get the same set of errors.
>>
>> Tool usage:
>> MyTool.exe main.cpp -- --driver-mode=cl
>>
>>
>> On Fri, Oct 23, 2015 at 2:22 AM, Manuel Klimek <klimek at google.com> wrote:
>>
>>> The second parameter is the name of the executable the compiler was
>>> "invoked as". This should be "clang-cl.exe" probably.
>>>
>>> On Thu, Oct 22, 2015 at 11:13 PM Daniel Dilts <diltsman at gmail.com>
>>> wrote:
>>>
>>>> I wrote a quick program to play with addTargetAndModeForProgramName,
>>>> and it appears to not work:
>>>>
>>>> #include <clang/Tooling/Tooling.h>
>>>>
>>>> int main()
>>>> {
>>>>    std::vector<std::string> args{ "clang-cl", "main.cpp" };
>>>>    clang::tooling::addTargetAndModeForProgramName(args,
>>>> "i686-pc-windows-msvc18.0.0");
>>>>    return 0;
>>>> }
>>>>
>>>> Any suggestions on what I am doing wrong?  The args variable does not
>>>> get updated by the function call.
>>>>
>>>>
>>>> On Thu, Oct 22, 2015 at 5:09 AM, Manuel Klimek <klimek at google.com>
>>>> wrote:
>>>>
>>>>> Note that to make writing compiler specific tools simpler, tooling has
>>>>> grown a function  addTargetAndModeForProgramName (where you can hopefully
>>>>> pass clang-cl for it to figure out a windows triple - if this doesn't work,
>>>>> let me know and we'll figure out how to fix that)
>>>>>
>>>>> On Thu, Oct 22, 2015 at 8:00 AM Reid Kleckner <rnk at google.com> wrote:
>>>>>
>>>>>> This seems more like failure to prefer Clang's immintrin.h over
>>>>>> MSVC's. Getting that to work in right Clang tools is annoying.
>>>>>>
>>>>>> Sent from phone
>>>>>> On Oct 21, 2015 7:27 PM, "Nico Weber via cfe-dev" <
>>>>>> cfe-dev at lists.llvm.org> wrote:
>>>>>>
>>>>>>> You probably need to pass some combination of -fms-compatibility
>>>>>>> -fms-extensions -fdelayed-template-parsing and a MS abi triple to -target
>>>>>>> to be able to parse SDK headers. You can try running `clang-cl -c
>>>>>>> some_file.cc -###` to see which cc1 parameters clang-cl passes by default.
>>>>>>>
>>>>>>> Actually, looking at lib/Driver/Tools.cpp, it looks like the driver
>>>>>>> will use good defaults as long as the triple thinks
>>>>>>> that isWindowsMSVCEnvironment() is true. Try adding something like "-target
>>>>>>> x86_64-pc-windows-msvc18.0.0" to your flag, that's probably enough.
>>>>>>> Alternatively, you could also try passing "--driver-mode=cl " as first
>>>>>>> parameter, then the tool will behave like clang-cl in general (but it'll
>>>>>>> expect clang-cl flags, see bin/clang-cl /? for a list. -I and -D should
>>>>>>> work).
>>>>>>>
>>>>>>> Nico
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Oct 21, 2015 at 6:11 PM, Daniel Dilts via cfe-dev <
>>>>>>> cfe-dev at lists.llvm.org> wrote:
>>>>>>>
>>>>>>>> I have a custom tool that uses libTooling.  I am running the tool
>>>>>>>> on Windows.  When I attempt to run the tool over my code I get many errors
>>>>>>>> of the following form:
>>>>>>>>
>>>>>>>> 2>  In file included from C:\Program Files (x86)\Microsoft Visual
>>>>>>>> Studio 14.0\VC\include\vector:6:
>>>>>>>> 2>  In file included from C:\Program Files (x86)\Microsoft Visual
>>>>>>>> Studio 14.0\VC\include\xmemory:6:
>>>>>>>> 2>  In file included from C:\Program Files (x86)\Microsoft Visual
>>>>>>>> Studio 14.0\VC\include\xmemory0:1015:
>>>>>>>> 2>  In file included from C:\Program Files (x86)\Microsoft Visual
>>>>>>>> Studio 14.0\VC\include\intrin.h:24:
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:764:28: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_loadu2_m128(/* float const* */ hiaddr, \
>>>>>>>> 2>                             ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:768:29: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_loadu2_m128d(/* double const* */ hiaddr, \
>>>>>>>> 2>                              ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:772:29: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_loadu2_m128i(/* __m128i const* */ hiaddr, \
>>>>>>>> 2>                              ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:782:29: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_storeu2_m128(/* float* */ hiaddr, /* float* */
>>>>>>>> loaddr, \
>>>>>>>> 2>                              ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:790:30: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_storeu2_m128d(/* double* */ hiaddr, /* double*
>>>>>>>> */ loaddr, \
>>>>>>>> 2>                               ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:798:30: error: invalid token in macro parameter
>>>>>>>> list
>>>>>>>> 2>  #define _mm256_storeu2_m128i(/* __m128i* */ hiaddr, /* __m128i*
>>>>>>>> */ loaddr, \
>>>>>>>> 2>                               ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:1117:25: error: invalid token in macro
>>>>>>>> parameter list
>>>>>>>> 2>  #define _mm256_set_m128(/* __m128 */ hi, /* __m128 */ lo) \
>>>>>>>> 2>                          ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:1120:26: error: invalid token in macro
>>>>>>>> parameter list
>>>>>>>> 2>  #define _mm256_set_m128d(/* __m128d */ hi, /* __m128d */ lo) \
>>>>>>>> 2>                           ^
>>>>>>>> 2>  C:\Program Files (x86)\Microsoft Visual Studio
>>>>>>>> 14.0\VC\include\immintrin.h:1123:26: error: invalid token in macro
>>>>>>>> parameter list
>>>>>>>> 2>  #define _mm256_set_m128i(/* __m128i */ hi, /* __m128i */ lo) \
>>>>>>>> 2>                           ^
>>>>>>>> 2>  9 errors generated.
>>>>>>>>
>>>>>>>> Is there some way to get my tool to handle this gracefully?  My
>>>>>>>> command-line for my tool looks like:
>>>>>>>> MyTool.exe -- -IC:/Path/To/Includes -DSOME_MACRO
>>>>>>>>
>>>>>>>> _______________________________________________
>>>>>>>> cfe-dev mailing list
>>>>>>>> cfe-dev at lists.llvm.org
>>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>> _______________________________________________
>>>>>>> cfe-dev mailing list
>>>>>>> cfe-dev at lists.llvm.org
>>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>>>>>>>
>>>>>>>
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20151027/6ee83c85/attachment.html>


More information about the cfe-dev mailing list