[llvm] r264881 - [cmake] Add -fms-compatibility-version=19 when clang-cl gives errors about char16_t

Aaron Ballman via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 30 10:55:14 PDT 2016


On Wed, Mar 30, 2016 at 1:30 PM, Reid Kleckner via llvm-commits
<llvm-commits at lists.llvm.org> wrote:
> Author: rnk
> Date: Wed Mar 30 12:30:26 2016
> New Revision: 264881
>
> URL: http://llvm.org/viewvc/llvm-project?rev=264881&view=rev
> Log:
> [cmake] Add -fms-compatibility-version=19 when clang-cl gives errors about char16_t
>
> What we are really trying to do here is to figure out if we are using
> the 2015 STL. Unfortunately, so far as I know the MSVC STL does not
> define a version macro that we can check directly. Instead I wrote a
> check to see if char16_t works.

Thank you for this! Out of curiosity, would it make sense to instead
set the compatibility version based on the host compiler directly?

~Aaron

>
> Modified:
>     llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
>
> Modified: llvm/trunk/cmake/modules/HandleLLVMOptions.cmake
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/HandleLLVMOptions.cmake?rev=264881&r1=264880&r2=264881&view=diff
> ==============================================================================
> --- llvm/trunk/cmake/modules/HandleLLVMOptions.cmake (original)
> +++ llvm/trunk/cmake/modules/HandleLLVMOptions.cmake Wed Mar 30 12:30:26 2016
> @@ -347,6 +347,17 @@ if( MSVC )
>    # "Enforce type conversion rules".
>    append("/Zc:rvalueCast" CMAKE_CXX_FLAGS)
>
> +  if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
> +    # In VS 2015, char16_t became a builtin type. Clang still defaults to VS
> +    # 2013 compatibility, where it cannot be a builtin type. If we're using an
> +    # STL newer than 2015, this compilation will fail. Rasing the MSVC

Raising instead of rasing.

> +    # compatibility version of the compiler will provide char16/32.
> +    check_cxx_source_compiles("#include <cstdint>\nchar16_t v1;\n" STL_PROVIDES_CHAR16_T)
> +    if (NOT STL_PROVIDES_CHAR16_T)
> +      append("-fms-compatibility-version=19" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
> +    endif()
> +  endif()
> +
>    if (NOT LLVM_ENABLE_TIMESTAMPS AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
>      # clang-cl and cl by default produce non-deterministic binaries because
>      # link.exe /incremental requires a timestamp in the .obj file.  clang-cl
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list