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

Daniel Dilts via cfe-dev cfe-dev at lists.llvm.org
Wed Oct 28 10:56:13 PDT 2015


My exact call to my tool is:
MyTool.exe main.cpp -- --driver-mode=cl -fms-compatibility -fms-extensions

I get:
error : unknown argument: '-fms-compatibility'
error : unknown argument: '-fms-extensions'

And I get the same set of errors from earlier.  Also, if I run it from the
command line I get a different set of errors than if I run it from a Visual
Studio build.


On Tue, Oct 27, 2015 at 4:52 PM, Luke Zarko <zarko at google.com> wrote:

> 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/20151028/cc073952/attachment.html>


More information about the cfe-dev mailing list