Enable more strict standards conformance in MSVC for rvalue casting and string litera...
authorAaron Ballman <aaron@aaronballman.com>
Tue, 5 Jan 2016 14:24:01 +0000 (14:24 +0000)
committerAaron Ballman <aaron@aaronballman.com>
Tue, 5 Jan 2016 14:24:01 +0000 (14:24 +0000)
Patch by Alexander Riccio

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@256836 91177308-0d34-0410-b5e6-96231b3b80d8

cmake/modules/HandleLLVMOptions.cmake

index 4c5ffe2f7b28e78094fa3da23ba55314be8eab16..f3a316f5782c852d68d066f8e4df97a563e1d4c1 100644 (file)
@@ -363,6 +363,17 @@ if( MSVC )
 
   append("/Zc:inline" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
 
+  # Disable string literal const->non-const type conversion
+  # "When specified, the compiler requires strict const-qualification
+  # conformance for pointers initialized by using string literals."
+  append("/Zc:strictStrings" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+
+  # Generate Intrinsic Functions
+  append("/Oi" CMAKE_C_FLAGS CMAKE_CXX_FLAGS)
+
+  # Enforce type conversion rules
+  append("/Zc:rvalueCast" CMAKE_CXX_FLAGS)
+
   # Disable sized deallocation if the flag is supported. MSVC fails to compile
   # the operator new overload in User otherwise.
   check_c_compiler_flag("/WX /Zc:sizedDealloc-" SUPPORTS_SIZED_DEALLOC)