[cfe-dev] Parsing VC++ headers with tool/libtooling
Manuel Klimek via cfe-dev
cfe-dev at lists.llvm.org
Fri Oct 23 02:22:08 PDT 2015
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/20151023/121f8a79/attachment.html>
More information about the cfe-dev
mailing list