Index: compiler-rt/lib/builtins/emutls.c =================================================================== --- compiler-rt/lib/builtins/emutls.c +++ compiler-rt/lib/builtins/emutls.c @@ -26,12 +26,23 @@ #define EMUTLS_SKIP_DESTRUCTOR_ROUNDS 0 #endif +#ifdef _MSC_VER && !defined(__clang__) +// MSVC raises a warning about a nonstandard extension being used for the 0 +// sized element in this array. Disable this for warn-as-error builds. +#pragma warning(push) +#pragma warning(disable : 4206) +#endif + typedef struct emutls_address_array { uintptr_t skip_destructor_rounds; uintptr_t size; // number of elements in the 'data' array void *data[]; } emutls_address_array; +#ifdef _MSC_VER && !defined(__clang__) +#pragma warning(pop) +#endif + static void emutls_shutdown(emutls_address_array *array); #ifndef _WIN32 Index: compiler-rt/lib/builtins/fixunsxfdi.c =================================================================== --- compiler-rt/lib/builtins/fixunsxfdi.c +++ compiler-rt/lib/builtins/fixunsxfdi.c @@ -25,6 +25,13 @@ // eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm // mmmm mmmm mmmm +#ifdef _MSC_VER +// MSVC throws a warning about 'unitialized variable use' here, +// disable it for builds that warn-as-error +#pragma warning(push) +#pragma warning(disable : 4700) +#endif + COMPILER_RT_ABI du_int __fixunsxfdi(long double a) { long_double_bits fb; fb.f = a; @@ -36,4 +43,6 @@ return fb.u.low.all >> (63 - e); } +#ifdef _MSC_VER +#pragma warning(pop) #endif Index: compiler-rt/lib/builtins/fixunsxfsi.c =================================================================== --- compiler-rt/lib/builtins/fixunsxfsi.c +++ compiler-rt/lib/builtins/fixunsxfsi.c @@ -25,6 +25,13 @@ // eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm // mmmm mmmm mmmm +#ifdef _MSC_VER +// MSVC throws a warning about 'unitialized variable use' here, +// disable it for builds that warn-as-error +#pragma warning(push) +#pragma warning(disable : 4700) +#endif + COMPILER_RT_ABI su_int __fixunsxfsi(long double a) { long_double_bits fb; fb.f = a; @@ -36,4 +43,8 @@ return fb.u.low.s.high >> (31 - e); } +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #endif // !_ARCH_PPC Index: compiler-rt/lib/builtins/fixxfdi.c =================================================================== --- compiler-rt/lib/builtins/fixxfdi.c +++ compiler-rt/lib/builtins/fixxfdi.c @@ -24,6 +24,13 @@ // eeee | 1mmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm // mmmm mmmm mmmm +#ifdef _MSC_VER +// MSVC throws a warning about 'unitialized variable use' here, +// disable it for builds that warn-as-error +#pragma warning(push) +#pragma warning(disable : 4700) +#endif + COMPILER_RT_ABI di_int __fixxfdi(long double a) { const di_int di_max = (di_int)((~(du_int)0) / 2); const di_int di_min = -di_max - 1; @@ -41,3 +48,7 @@ } #endif // !_ARCH_PPC + +#ifdef _MSC_VER +#pragma warning(pop) +#endif \ No newline at end of file Index: compiler-rt/lib/builtins/udivmoddi4.c =================================================================== --- compiler-rt/lib/builtins/udivmoddi4.c +++ compiler-rt/lib/builtins/udivmoddi4.c @@ -17,6 +17,13 @@ // Translated from Figure 3-40 of The PowerPC Compiler Writer's Guide +#ifdef _MSC_VER +// MSVC throws a warning about mod 0 here, disable it for builds that +// warn-as-error +#pragma warning(push) +#pragma warning(disable : 4724) +#endif + COMPILER_RT_ABI du_int __udivmoddi4(du_int a, du_int b, du_int *rem) { const unsigned n_uword_bits = sizeof(su_int) * CHAR_BIT; const unsigned n_udword_bits = sizeof(du_int) * CHAR_BIT; @@ -187,3 +194,7 @@ *rem = r.all; return q.all; } + +#ifdef _MSC_VER +#pragma warning(pop) +#endif \ No newline at end of file