Index: cmake/modules/CheckCompilerVersion.cmake
===================================================================
--- cmake/modules/CheckCompilerVersion.cmake
+++ cmake/modules/CheckCompilerVersion.cmake
@@ -10,7 +10,10 @@
set(CLANG_SOFT_ERROR 3.5)
set(APPLECLANG_MIN 3.1)
set(APPLECLANG_SOFT_ERROR 6.0)
-set(MSVC_MIN 19.00.24213.1)
+
+# https://en.wikipedia.org/wiki/Microsoft_Visual_C#Internal_version_numbering
+# _MSC_VER == 1910 MSVC++ 14.1 (Visual Studio 2017 version 15.0)
+set(MSVC_MIN 19.1)
set(MSVC_SOFT_ERROR 19.1)
# Map the above GCC versions to dates: https://gcc.gnu.org/develop.html#timeline
Index: docs/GettingStarted.rst
===================================================================
--- docs/GettingStarted.rst
+++ docs/GettingStarted.rst
@@ -240,7 +240,7 @@
* Clang 3.1
* Apple Clang 3.1
* GCC 4.8
-* Visual Studio 2015 (Update 3)
+* Visual Studio 2017
Anything older than these toolchains *may* work, but will require forcing the
build system with a special option and is not really a supported host platform.
@@ -275,7 +275,7 @@
This section mostly applies to Linux and older BSDs. On macOS, you should
have a sufficiently modern Xcode, or you will likely need to upgrade until you
do. Windows does not have a "system compiler", so you must install either Visual
-Studio 2015 or a recent version of mingw64. FreeBSD 10.0 and newer have a modern
+Studio 2017 or a recent version of mingw64. FreeBSD 10.0 and newer have a modern
Clang as the system compiler.
However, some Linux distributions and some other or older BSDs sometimes have
Index: docs/GettingStartedVS.rst
===================================================================
--- docs/GettingStartedVS.rst
+++ docs/GettingStartedVS.rst
@@ -39,13 +39,13 @@
Hardware
--------
-Any system that can adequately run Visual Studio 2015 is fine. The LLVM
+Any system that can adequately run Visual Studio 2017 is fine. The LLVM
source tree and object files, libraries and executables will consume
approximately 3GB.
Software
--------
-You will need Visual Studio 2015 or higher, with the latest Update installed.
+You will need Visual Studio 2017 or higher, with the latest Update installed.
You will also need the `CMake `_ build system since it
generates the project files you will use to build with.
Index: docs/ReleaseNotes.rst
===================================================================
--- docs/ReleaseNotes.rst
+++ docs/ReleaseNotes.rst
@@ -76,6 +76,12 @@
pointee type. In the next release we intend to make this parameter
mandatory in preparation for opaque pointer types.
+Changes to building LLVM
+------------------------
+
+* Building LLVM with Visual Studio now requires version 2017 or later.
+
+
Changes to the ARM Backend
--------------------------
Index: include/llvm/Support/AlignOf.h
===================================================================
--- include/llvm/Support/AlignOf.h
+++ include/llvm/Support/AlignOf.h
@@ -28,79 +28,11 @@
/// up here, we can then begin to indirect between these using normal C++
/// template parameters.
-// MSVC requires special handling here.
-#ifndef _MSC_VER
-
template
struct AlignedCharArray {
alignas(Alignment) char buffer[Size];
};
-#else // _MSC_VER
-
-/// Create a type with an aligned char buffer.
-template
-struct AlignedCharArray;
-
-// We provide special variations of this template for the most common
-// alignments because __declspec(align(...)) doesn't actually work when it is
-// a member of a by-value function argument in MSVC, even if the alignment
-// request is something reasonably like 8-byte or 16-byte. Note that we can't
-// even include the declspec with the union that forces the alignment because
-// MSVC warns on the existence of the declspec despite the union member forcing
-// proper alignment.
-
-template
-struct AlignedCharArray<1, Size> {
- union {
- char aligned;
- char buffer[Size];
- };
-};
-
-template
-struct AlignedCharArray<2, Size> {
- union {
- short aligned;
- char buffer[Size];
- };
-};
-
-template
-struct AlignedCharArray<4, Size> {
- union {
- int aligned;
- char buffer[Size];
- };
-};
-
-template
-struct AlignedCharArray<8, Size> {
- union {
- double aligned;
- char buffer[Size];
- };
-};
-
-
-// The rest of these are provided with a __declspec(align(...)) and we simply
-// can't pass them by-value as function arguments on MSVC.
-
-#define LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(x) \
- template \
- struct AlignedCharArray { \
- __declspec(align(x)) char buffer[Size]; \
- };
-
-LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(16)
-LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(32)
-LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(64)
-LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT(128)
-
-#undef LLVM_ALIGNEDCHARARRAY_TEMPLATE_ALIGNMENT
-
-#endif // _MSC_VER
-
namespace detail {
template