By usage of -fmodules, all the intrinsic items are loaded automatically.
The headers included come however from Visual Studio, thus bringing some
conflicting declarations. On the other hand, -fmodules is needed to
mitigate linking issues with clang in VS compatibility mode.
static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) {
__cpuid_count(func, subfunc, cpuinfo->eax, cpuinfo->ebx, cpuinfo->ecx, cpuinfo->edx);
}
-#elif defined(ZEND_WIN32)
+#elif defined(ZEND_WIN32) && !defined(__clang__)
# include <intrin.h>
static void __zend_cpuid(uint32_t func, uint32_t subfunc, zend_cpu_info *cpuinfo) {
int regs[4];
# include <alloca.h>
#endif
-#if defined(ZEND_WIN32)
+#if defined(ZEND_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif
#include "url_scanner_ex.h"
-#if defined(_WIN32) && defined(__clang__)
+#if defined(_WIN32) && !defined(__clang__)
#include <intrin.h>
#endif
#endif
#ifdef PHP_WIN32
+# ifndef __clang__
# include <intrin.h>
+# endif
# include <winsock2.h>
# include <ws2ipdef.h>
# include <Ws2tcpip.h>