diff --git a/dmd/dsymbol.h b/dmd/dsymbol.h index e4cffee4..55264a78 100644 --- a/dmd/dsymbol.h +++ b/dmd/dsymbol.h @@ -22,6 +22,10 @@ #include "arraytypes.h" #if IN_LLVM +#if defined(_MSC_VER) +#undef min +#undef max +#endif #include "../ir/irdsymbol.h" #endif diff --git a/dmd/lexer.c b/dmd/lexer.c index 5495b86a..c3070f5d 100644 --- a/dmd/lexer.c +++ b/dmd/lexer.c @@ -2507,10 +2507,15 @@ done: real_t::parse((char *)stringbuffer.data, real_t::Float); #else strtofres = strtof((char *)stringbuffer.data, NULL); +#ifdef IN_LLVM +#ifdef _MSC_VER +#define HUGE_VALF HUGE_VAL +#endif // LDC change: don't error on gradual underflow if (errno == ERANGE && strtofres != 0 && strtofres != HUGE_VALF && strtofres != -HUGE_VALF) errno = 0; +#endif #endif result = TOKfloat32v; p++; @@ -2521,10 +2526,12 @@ done: real_t::parse((char *)stringbuffer.data, real_t::Double); #else strtodres = strtod((char *)stringbuffer.data, NULL); +#if IN_LLVM // LDC change: don't error on gradual underflow if (errno == ERANGE && strtodres != 0 && strtodres != HUGE_VAL && strtodres != -HUGE_VAL) errno = 0; +#endif #endif result = TOKfloat64v; break; diff --git a/dmd/mars.h b/dmd/mars.h index ae11e652..bc9263fa 100644 --- a/dmd/mars.h +++ b/dmd/mars.h @@ -69,10 +69,6 @@ the target object file format: #include #include #include -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS 1 -#endif -#include #include #ifdef __DMC__ diff --git a/dmd2/dsymbol.h b/dmd2/dsymbol.h index 197ebcd9..2b16eecb 100644 --- a/dmd2/dsymbol.h +++ b/dmd2/dsymbol.h @@ -22,6 +22,10 @@ #include "arraytypes.h" #if IN_LLVM +#if defined(_MSC_VER) +#undef min +#undef max +#endif #include "../ir/irdsymbol.h" #endif diff --git a/dmd2/lexer.c b/dmd2/lexer.c index 32a4a9ab..7b53f212 100644 --- a/dmd2/lexer.c +++ b/dmd2/lexer.c @@ -2502,11 +2502,16 @@ done: #ifdef IN_GCC real_t::parse((char *)stringbuffer.data, real_t::Float); #else - strtofres = strtof((char *)stringbuffer.data, NULL); - // LDC change: don't error on gradual underflow - if (errno == ERANGE && - strtofres != 0 && strtofres != HUGE_VALF && strtofres != -HUGE_VALF) - errno = 0; + strtofres = strtof((char *)stringbuffer.data, NULL); +#ifdef IN_LLVM +#ifdef _MSC_VER +#define HUGE_VALF HUGE_VAL +#endif + // LDC change: don't error on gradual underflow + if (errno == ERANGE && + strtofres != 0 && strtofres != HUGE_VALF && strtofres != -HUGE_VALF) + errno = 0; +#endif #endif result = TOKfloat32v; p++; @@ -2516,11 +2521,13 @@ done: #ifdef IN_GCC real_t::parse((char *)stringbuffer.data, real_t::Double); #else - strtodres = strtod((char *)stringbuffer.data, NULL); - // LDC change: don't error on gradual underflow - if (errno == ERANGE && - strtodres != 0 && strtodres != HUGE_VAL && strtodres != -HUGE_VAL) - errno = 0; + strtodres = strtod((char *)stringbuffer.data, NULL); +#ifdef IN_LLVM + // LDC change: don't error on gradual underflow + if (errno == ERANGE && + strtodres != 0 && strtodres != HUGE_VAL && strtodres != -HUGE_VAL) + errno = 0; +#endif #endif result = TOKfloat64v; break; diff --git a/dmd2/mars.h b/dmd2/mars.h index 82083292..dc640308 100644 --- a/dmd2/mars.h +++ b/dmd2/mars.h @@ -69,10 +69,6 @@ the target object file format: #include #include #include -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS 1 -#endif -#include #include #ifdef __DMC__