From: Jacek C. <ja...@co...> - 2017-02-09 11:29:11
|
Yeah, I think that we should fix clang with -fms-extensions. __has_builtin looks like a nice way to fix it. Jacek On 09.02.2017 01:52, David Grayson wrote: > Ah, from your paste, it looks like mingw-w64 and clang are fighting to > declare a lot of builtins when -fms-extensions is turned on. > > I would personally prefer to use compiler implementations of these > things instead of header file implementations, so I think that > mingw-w64 should try to support clang with -fms-extensions turned on. > I'm not sure it try to support clang when -fms-extensions is turned > off. But it would be easy to do so since clang has the __has_builtin > macro which can check which builtins are enabled. > > --David > > On Wed, Feb 8, 2017 at 4:35 PM, Mateusz Mikuła <ma...@gm...> wrote: >> You are right David and now I remember the thing about ms-extensions. >> Declspec was part of those extensions and enabling it by default caused >> errors with specific code so declspec was changed to general attribute >> instead. >> Since I have clang git build (trying to upstream some patches used by >> MSYS2), I tried it also: >> https://paste.ubuntu.com/23957478/ >> >> While for 3.9.x Clang `-fms-extensions` didn't hurt, master branch require >> some corrections but it is another issue. >> >> >> 2017-02-09 0:15 GMT+01:00 David Grayson <dav...@gm...>: >> >>> I can confirm that MSYS2's x86_64 clang++ compiler does not support >>> __popcnt but does support __builtin_popcount. I looked into it a >>> little bit, and found out that the clang commit that adds the __popcnt >>> builtins is very recent (September 2016). I seems like it has not >>> made it into a release yet. >>> >>> Here is the commit: >>> >>> https://github.com/llvm-mirror/clang/commit/5eb95c4c284486351e3ed0fdad011a >>> cf41540c8b >>> >>> The source code archive that Alexey used to build the MSYS2 clang++ >>> does not have the changes from that commit in it: >>> >>> http://repo.msys2.org/mingw/sources/mingw-w64-clang-3.9.1-3.src.tar.gz >>> >>> I don't intend to submit any more patches for this issue. Jacek has >>> already committed my patch to mingw-w64 (thanks!). Once the new >>> version of clang comes out and people start using it there should not >>> be any problems. If any clang users are itching to use __popcnt >>> before the new version of clang comes out, they can easily remove the >>> #if I put in intrin-impl.h. They could also use __has_builtin in >>> intrin-impl.h to detect whether clang has the builtin or not. >>> >>> Mateusz, the "CodeGen" folder in clang is not just used for MSVC libs, >>> it has tons of general-purpose code for generating LLVM code from >>> C/C++ code. >>> >>> --David Grayson |