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