From 86b838c70b30998a981f6e53cacb0885963eda66 Mon Sep 17 00:00:00 2001 From: Michael Paquier Date: Mon, 30 May 2022 16:44:22 +0900 Subject: [PATCH v2] Remove support for VS 2013 --- src/include/port/win32.h | 10 +++---- src/include/port/win32_port.h | 7 +---- src/backend/main/main.c | 22 --------------- src/backend/optimizer/path/costsize.c | 4 +-- src/backend/utils/adt/float.c | 6 +--- src/backend/utils/adt/pg_locale.c | 40 --------------------------- src/port/chklocale.c | 33 ++++------------------ src/port/strtof.c | 9 ------ doc/src/sgml/install-windows.sgml | 10 +++---- configure | 7 ++--- configure.ac | 7 ++--- src/tools/msvc/MSBuildProject.pm | 27 +----------------- src/tools/msvc/README | 8 +++--- src/tools/msvc/Solution.pm | 28 ------------------- src/tools/msvc/VSObjectFactory.pm | 12 ++------ 15 files changed, 30 insertions(+), 200 deletions(-) diff --git a/src/include/port/win32.h b/src/include/port/win32.h index c6213c77c3..539f3ec6d1 100644 --- a/src/include/port/win32.h +++ b/src/include/port/win32.h @@ -11,12 +11,12 @@ /* * Make sure _WIN32_WINNT has the minimum required value. - * Leave a higher value in place. When building with at least Visual - * Studio 2015 the minimum requirement is Windows Vista (0x0600) to - * get support for GetLocaleInfoEx() with locales. For everything else - * the minimum version is Windows XP (0x0501). + * Leave a higher value in place. When building with Visual Studio the + * minimum requirement is Windows Vista (0x0600) to get support for + * GetLocaleInfoEx() with locales. For everything else the minimum + * version is Windows XP (0x0501). */ -#if defined(_MSC_VER) && _MSC_VER >= 1900 +#ifdef _MSC_VER #define MIN_WINNT 0x0600 #else #define MIN_WINNT 0x0501 diff --git a/src/include/port/win32_port.h b/src/include/port/win32_port.h index dbbf88f8e8..c0225603f2 100644 --- a/src/include/port/win32_port.h +++ b/src/include/port/win32_port.h @@ -531,13 +531,8 @@ typedef unsigned short mode_t; #endif /* _MSC_VER */ -#if (defined(_MSC_VER) && (_MSC_VER < 1900)) || \ - defined(__MINGW32__) || defined(__MINGW64__) +#if defined(__MINGW32__) || defined(__MINGW64__) /* - * VS2013 has a strtof() that seems to give correct answers for valid input, - * even on the rounding edge cases, but which doesn't handle out-of-range - * input correctly. Work around that. - * * Mingw claims to have a strtof, and my reading of its source code suggests * that it ought to work (and not need this hack), but the regression test * results disagree with me; whether this is a version issue or not is not diff --git a/src/backend/main/main.c b/src/backend/main/main.c index c43a527d3f..bb782fa1ec 100644 --- a/src/backend/main/main.c +++ b/src/backend/main/main.c @@ -30,11 +30,6 @@ #include #endif -#if defined(_M_AMD64) && _MSC_VER == 1800 -#include -#include -#endif - #include "bootstrap/bootstrap.h" #include "common/username.h" #include "port/atomics.h" @@ -290,23 +285,6 @@ startup_hacks(const char *progname) _CrtSetReportFile(_CRT_ASSERT, _CRTDBG_FILE_STDERR); _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE | _CRTDBG_MODE_DEBUG); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); - -#if defined(_M_AMD64) && _MSC_VER == 1800 - - /*---------- - * Avoid crashing in certain floating-point operations if we were - * compiled for x64 with MS Visual Studio 2013 and are running on - * Windows prior to 7/2008R2 SP1 on an AVX2-capable CPU. - * - * Ref: https://connect.microsoft.com/VisualStudio/feedback/details/811093/visual-studio-2013-rtm-c-x64-code-generation-bug-for-avx2-instructions - *---------- - */ - if (!IsWindows7SP1OrGreater()) - { - _set_FMA3_enable(0); - } -#endif /* defined(_M_AMD64) && _MSC_VER == 1800 */ - } #endif /* WIN32 */ diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index fcc26b01a4..5e5732f6e1 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -5445,10 +5445,8 @@ calc_joinrel_size_estimate(PlannerInfo *root, double outer_rows, double inner_rows, SpecialJoinInfo *sjinfo, - List *restrictlist_in) + List *restrictlist) { - /* This apparently-useless variable dodges a compiler bug in VS2013: */ - List *restrictlist = restrictlist_in; JoinType jointype = sjinfo->jointype; Selectivity fkselec; Selectivity jselec; diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c index 63bb0f2277..fc8f39a7a9 100644 --- a/src/backend/utils/adt/float.c +++ b/src/backend/utils/adt/float.c @@ -249,13 +249,9 @@ float4in(PG_FUNCTION_ARGS) * precision). We'd prefer not to throw error for that, so try to * detect whether it's a "real" out-of-range condition by checking * to see if the result is zero or huge. - * - * Use isinf() rather than HUGE_VALF on VS2013 because it - * generates a spurious overflow warning for -HUGE_VALF. Also use - * isinf() if HUGE_VALF is missing. */ if (val == 0.0 || -#if !defined(HUGE_VALF) || (defined(_MSC_VER) && (_MSC_VER < 1900)) +#if !defined(HUGE_VALF) isinf(val) #else (val >= HUGE_VALF || val <= -HUGE_VALF) diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c index a0490a7522..34bd8d424e 100644 --- a/src/backend/utils/adt/pg_locale.c +++ b/src/backend/utils/adt/pg_locale.c @@ -960,7 +960,6 @@ cache_locale_time(void) * [2] https://docs.microsoft.com/en-us/windows/win32/intl/locale-names */ -#if _MSC_VER >= 1900 /* * Callback function for EnumSystemLocalesEx() in get_iso_localename(). * @@ -1110,7 +1109,6 @@ get_iso_localename(const char *winlocname) return NULL; } -#endif /* _MSC_VER >= 1900 */ static char * IsoLocaleName(const char *winlocname) @@ -1125,46 +1123,8 @@ IsoLocaleName(const char *winlocname) return iso_lc_messages; } else - { -#if (_MSC_VER >= 1900) /* Visual Studio 2015 or later */ return get_iso_localename(winlocname); -#else - _locale_t loct; - loct = _create_locale(LC_CTYPE, winlocname); - if (loct != NULL) - { - size_t rc; - char *hyphen; - - /* Locale names use only ASCII, any conversion locale suffices. */ - rc = wchar2char(iso_lc_messages, loct->locinfo->locale_name[LC_CTYPE], - sizeof(iso_lc_messages), NULL); - _free_locale(loct); - if (rc == -1 || rc == sizeof(iso_lc_messages)) - return NULL; - - /* - * Since the message catalogs sit on a case-insensitive - * filesystem, we need not standardize letter case here. So long - * as we do not ship message catalogs for which it would matter, - * we also need not translate the script/variant portion, e.g. - * uz-Cyrl-UZ to uz_UZ@cyrillic. Simply replace the hyphen with - * an underscore. - * - * Note that the locale name can be less-specific than the value - * we would derive under earlier Visual Studio releases. For - * example, French_France.1252 yields just "fr". This does not - * affect any of the country-specific message catalogs available - * as of this writing (pt_BR, zh_CN, zh_TW). - */ - hyphen = strchr(iso_lc_messages, '-'); - if (hyphen) - *hyphen = '_'; - return iso_lc_messages; - } -#endif /* Visual Studio 2015 or later */ - } #endif /* defined(_MSC_VER) */ return NULL; /* Not supported on this version of msvc/mingw */ } diff --git a/src/port/chklocale.c b/src/port/chklocale.c index c85d8da3c8..2aaf2ae8c0 100644 --- a/src/port/chklocale.c +++ b/src/port/chklocale.c @@ -191,19 +191,10 @@ static const struct encoding_match encoding_match_list[] = { /* * On Windows, use CP instead of the nl_langinfo() result * - * Visual Studio 2012 expanded the set of valid LC_CTYPE values, so have its - * locale machinery determine the code page. See comments at IsoLocaleName(). - * For other compilers, follow the locale's predictable format. - * - * Visual Studio 2015 should still be able to do the same, but the declaration - * of lc_codepage is missing in _locale_t, causing this code compilation to - * fail, hence this falls back instead on GetLocaleInfoEx. VS 2015 may be an - * exception and post-VS2015 versions should be able to handle properly the - * codepage number using _create_locale(). So, instead of the same logic as - * VS 2012 and VS 2013, this routine uses GetLocaleInfoEx to parse short - * locale names like "de-DE", "fr-FR", etc. If those cannot be parsed correctly - * process falls back to the pre-VS-2010 manual parsing done with - * using _. as a base. + * This routine uses GetLocaleInfoEx() to parse short locale names like + * "de-DE", "fr-FR", etc. If those cannot be parsed correctly process falls + * back to the pre-VS-2010 manual parsing done with using + * _. as a base. * * Returns a malloc()'d string for the caller to free. */ @@ -211,22 +202,9 @@ static char * win32_langinfo(const char *ctype) { char *r = NULL; - -#if defined(_MSC_VER) && (_MSC_VER < 1900) - _locale_t loct = NULL; - - loct = _create_locale(LC_CTYPE, ctype); - if (loct != NULL) - { - r = malloc(16); /* excess */ - if (r != NULL) - sprintf(r, "CP%u", loct->locinfo->lc_codepage); - _free_locale(loct); - } -#else char *codepage; -#if defined(_MSC_VER) && (_MSC_VER >= 1900) +#if defined(_MSC_VER) uint32 cp; WCHAR wctype[LOCALE_NAME_MAX_LENGTH]; @@ -279,7 +257,6 @@ win32_langinfo(const char *ctype) } } } -#endif return r; } diff --git a/src/port/strtof.c b/src/port/strtof.c index 7da05be687..314fcc9851 100644 --- a/src/port/strtof.c +++ b/src/port/strtof.c @@ -54,15 +54,6 @@ strtof(const char *nptr, char **endptr) #elif HAVE_BUGGY_STRTOF /* - * On Windows, there's a slightly different problem: VS2013 has a strtof() - * that returns the correct results for valid input, but may fail to report an - * error for underflow or overflow, returning 0 instead. Work around that by - * trying strtod() when strtof() returns 0.0 or [+-]Inf, and calling it an - * error if the result differs. Also, strtof() doesn't handle subnormal input - * well, so prefer to round the strtod() result in such cases. (Normally we'd - * just say "too bad" if strtof() doesn't support subnormals, but since we're - * already in here fixing stuff, we might as well do the best fix we can.) - * * Cygwin has a strtof() which is literally just (float)strtod(), which means * we can't avoid the double-rounding problem; but using this wrapper does get * us proper over/underflow checks. (Also, if they fix their strtof(), the diff --git a/doc/src/sgml/install-windows.sgml b/doc/src/sgml/install-windows.sgml index bcfd5a1a10..ef30e797e3 100644 --- a/doc/src/sgml/install-windows.sgml +++ b/doc/src/sgml/install-windows.sgml @@ -22,7 +22,7 @@ Windows. The simplest way to build with Microsoft tools is to install Visual Studio 2022 and use the included compiler. It is also possible to build with the full - Microsoft Visual C++ 2013 to 2022. + Microsoft Visual C++ 2015 to 2022. In some cases that requires the installation of the Windows SDK in addition to the compiler. @@ -77,19 +77,17 @@ Both 32-bit and 64-bit builds are possible with the Microsoft Compiler suite. 32-bit PostgreSQL builds are possible with - Visual Studio 2013 to + Visual Studio 2015 to Visual Studio 2022, as well as standalone Windows SDK releases 8.1a to 10. 64-bit PostgreSQL builds are supported with Microsoft Windows SDK version 8.1a to 10 or - Visual Studio 2013 and above. Compilation + Visual Studio 2015 and above. Compilation is supported down to Windows 7 and Windows Server 2008 R2 SP1 when building with - Visual Studio 2013 to + Visual Studio 2015 to Visual Studio 2022.