зеркало из https://github.com/github/ruby.git
[MSWin] Tentative measure for a bug of VS2022 [Misc #18362]
Disable the use of `__assume()`, when combinations of `isnan()`, `isinf()` and `__assume()` will be wrongly optimized due to the bug of VS2022.
This commit is contained in:
Родитель
32af1a3b5e
Коммит
ed8776f960
|
@ -702,7 +702,9 @@ $(CONFIG_H): $(MKFILES) $(srcdir)/win32/Makefile.sub $(win_srcdir)/Makefile.sub
|
|||
#define ALWAYS_INLINE(x) __forceinline x
|
||||
#define WARN_UNUSED_RESULT(x) x
|
||||
#define MAYBE_UNUSED(x) x
|
||||
!if !defined(VS2022_FP_BUG)
|
||||
#define HAVE___ASSUME 1
|
||||
!endif
|
||||
#define FUNC_STDCALL(x) __stdcall x
|
||||
#define FUNC_CDECL(x) __cdecl x
|
||||
#define FUNC_FASTCALL(x) __fastcall x
|
||||
|
|
|
@ -123,6 +123,55 @@ int main(void) {FILE *volatile f = stdin; return 0;}
|
|||
|
||||
-headers-: nul
|
||||
|
||||
-headers-: vs2022-fp-bug
|
||||
|
||||
# Check the bug reported at:
|
||||
# https://developercommunity.visualstudio.com/t/With-__assume-isnan-after-isinf/1515649
|
||||
# https://developercommunity.visualstudio.com/t/Prev-Issue---with-__assume-isnan-/1597317
|
||||
vs2022-fp-bug:
|
||||
@echo checking for $(@:-= )
|
||||
@echo <<$@.c > NUL
|
||||
/* compile with -O2 */
|
||||
#include <math.h>
|
||||
#include <float.h>
|
||||
|
||||
#define value_finite(d) 'f'
|
||||
#define value_infinity() 'i'
|
||||
#define value_nan() 'n'
|
||||
|
||||
#ifdef NO_ASSUME
|
||||
# define ASSUME_TRUE() (void)0
|
||||
#else
|
||||
# define ASSUME_TRUE() __assume(1)
|
||||
#endif
|
||||
|
||||
static int
|
||||
check_value(double value)
|
||||
{
|
||||
if (isinf(value)) {
|
||||
return value_infinity();
|
||||
}
|
||||
else if (isnan(value)) {
|
||||
return value_nan();
|
||||
}
|
||||
|
||||
ASSUME_TRUE();
|
||||
return value_finite(value);
|
||||
}
|
||||
|
||||
int
|
||||
main(void)
|
||||
{
|
||||
int c = check_value(nan(""));
|
||||
printf("NaN=>%c\n", c);
|
||||
return c != value_nan();
|
||||
}
|
||||
<<
|
||||
@( \
|
||||
($(CC) -O2 -DNO_ASSUME $@.c && .\$@ && $(CC) -O2 $@.c) && \
|
||||
(.\$@ || echo>>$(MAKEFILE) VS2022_FP_BUG=1) \
|
||||
) & $(WIN32DIR:/=\)\rm.bat $@.*
|
||||
|
||||
-version-: nul verconf.mk
|
||||
|
||||
verconf.mk: nul
|
||||
|
|
Загрузка…
Ссылка в новой задаче