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 <mati...@gmail.com> 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 <davidegray...@gmail.com>: > >> 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 >> >> On Wed, Feb 8, 2017 at 1:24 PM, Mateusz <mati...@gmail.com> wrote: >> > Opps, gmail put output into quote. Improved version: >> > $ clang++ popcnt.cc -std=c++14 -fms-extensions >> > popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16' >> > unsigned short usr = __popcnt16(us[i]); >> > ^ >> > popcnt.cc:17:24: error: use of undeclared identifier '__popcnt' >> > unsigned int uir = __popcnt(ui[i]); >> > ^ >> > popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64'; did >> you >> > mean '_popcnt64'? >> > unsigned __int64 ulr = __popcnt64(ul[i]); >> > ^~~~~~~~~~ >> > _popcnt64 >> > D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\popcntintrin.h:90:1: >> note: >> > '_popcnt64' declared here >> > _popcnt64(long long __A) >> > ^ >> > 3 errors generated. >> > >> > >> > >> > 2017-02-08 22:22 GMT+01:00 Mateusz <mati...@gmail.com>: >> > >> >> I think ms-extensions was made default option for mingw and msvc clang >> and >> >> codegen is used only for creating msvc libs. Here is Clang output >> anyway: >> >> >> >> $ clang++ popcnt.cc -std=c++14 -fms-extensions >> >> popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16' >> >> unsigned short usr = __popcnt16(us[i]); >> >> ^ >> >> popcnt.cc:17:24: error: use of undeclared identifier '__popcnt' >> >> unsigned int uir = __popcnt(ui[i]); >> >> ^ >> >> popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64'; did >> you >> >> mean '_popcnt64'? >> >> unsigned __int64 ulr = __popcnt64(ul[i]); >> >> ^~~~~~~~~~ >> >> _popcnt64 >> >> D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\popcntintrin.h:90:1: >> >> note: '_popcnt64' declared here >> >> _popcnt64(long long __A) >> >> ^ >> >> 3 errors generated. >> >> >> >> 2017-02-08 20:10 GMT+01:00 David Grayson <davidegray...@gmail.com>: >> >> >> >>> Mateusz, thanks for looking in to this. >> >>> >> >>> Here are the relevant lines from the clang source code that indicate >> >>> that it supports those builtins: >> >>> >> >>> https://github.com/llvm-mirror/clang/blob/3e45634a7f951c2306 >> >>> e4b368f9fb8c8d80c48273/include/clang/Basic/Builtins.def#L760-L762 >> >>> https://github.com/llvm-mirror/clang/blob/4cedfcc1ecf8387082 >> >>> 183508604b7f47c634f708/lib/CodeGen/CGBuiltin.cpp#L804-L821 >> >>> >> >>> Can you try your clang test again with the "-fms-extensions" argument? >> >>> >> >>> (I tried to test clang myself earlier but I had various issues. I >> >>> could probably try again tonight if you don't want to.) >> >>> >> >>> --David >> >>> >> >>> On Wed, Feb 8, 2017 at 10:54 AM, Mateusz <mati...@gmail.com> wrote: >> >>> > MSYS2 native Clang test-popcnt.cpp: >> >>> > >> >>> > $ clang++ popcnt.cc -std=c++14 >> >>> > popcnt.cc:9:26: error: use of undeclared identifier '__popcnt16' >> >>> > unsigned short usr = __popcnt16(us[i]); >> >>> > ^ >> >>> > popcnt.cc:17:24: error: use of undeclared identifier '__popcnt' >> >>> > unsigned int uir = __popcnt(ui[i]); >> >>> > ^ >> >>> > popcnt.cc:26:28: error: use of undeclared identifier '__popcnt64'; >> did >> >>> you >> >>> > mean '_popcnt64'? >> >>> > unsigned __int64 ulr = __popcnt64(ul[i]); >> >>> > ^~~~~~~~~~ >> >>> > _popcnt64 >> >>> > D:\msys64\mingw64\bin\..\lib\clang\3.9.1\include\ >> popcntintrin.h:90:1: >> >>> note: >> >>> > '_popcnt64' declared here >> >>> > _popcnt64(long long __A) >> >>> > ^ >> >>> > 3 errors generated. >> >>> > >> >>> > Probably its safe to enable it for Clang, I'll try tomorrow late. >> >>> > >> >>> > 2017-02-08 18:37 GMT+01:00 David Grayson <davidegray...@gmail.com>: >> >>> > >> >>> >> Hello. This patch adds support for the Microsoft __popcnt16, >> __popcnt, >> >>> >> and __popcnt64 intrinsics, which are documented here: >> >>> >> >> >>> >> https://msdn.microsoft.com/en-us/library/bb385231.aspx >> >>> >> >> >>> >> I was trying to compile ANGLE recently and one of the first errors I >> >>> >> encountered was due to both GCC/mingw-w64 not supporting __popcnt. >> >>> >> >> >>> >> I attached the simple C++ program I used to test this patch. >> >>> >> >> >>> >> I am not totally sure, but it looks like Clang already supports the >> >>> >> __popcnt intrinsics because I saw code for it in the clang >> >>> repository. So >> >>> >> that is why this patch has "#if !defined(__clang__)" around it. >> >>> >> >> >>> >> I read the documentation for intrin.h and intrin-impl.h and I >> believe >> >>> this >> >>> >> patch follows all the rules. It would be great if it could be >> merged >> >>> in. >> >>> >> Thanks! >> >>> >> >> >>> >> --David Grayson >> >>> >> >> >>> >> ------------------------------------------------------------ >> >>> >> ------------------ >> >>> >> Check out the vibrant tech community on one of the world's most >> >>> >> engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> >>> >> _______________________________________________ >> >>> >> Mingw-w64-public mailing list >> >>> >> Mingw-w64-public@lists.sourceforge.net >> >>> >> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> >>> >> >> >>> >> >> >>> > ------------------------------------------------------------ >> >>> ------------------ >> >>> > Check out the vibrant tech community on one of the world's most >> >>> > engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> >>> > _______________________________________________ >> >>> > Mingw-w64-public mailing list >> >>> > Mingw-w64-public@lists.sourceforge.net >> >>> > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> >>> >> >>> ------------------------------------------------------------ >> >>> ------------------ >> >>> Check out the vibrant tech community on one of the world's most >> >>> engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> >>> _______________________________________________ >> >>> Mingw-w64-public mailing list >> >>> Mingw-w64-public@lists.sourceforge.net >> >>> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> >>> >> >> >> >> >> > ------------------------------------------------------------ >> ------------------ >> > Check out the vibrant tech community on one of the world's most >> > engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> > _______________________________________________ >> > Mingw-w64-public mailing list >> > Mingw-w64-public@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> >> ------------------------------------------------------------ >> ------------------ >> Check out the vibrant tech community on one of the world's most >> engaging tech sites, SlashDot.org! http://sdm.link/slashdot >> _______________________________________________ >> Mingw-w64-public mailing list >> Mingw-w64-public@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/mingw-w64-public >> > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, SlashDot.org! http://sdm.link/slashdot > _______________________________________________ > Mingw-w64-public mailing list > Mingw-w64-public@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/mingw-w64-public ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Mingw-w64-public mailing list Mingw-w64-public@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mingw-w64-public