Desde o início, o analisador PVS-Studio C ++ para Windows (então ainda Viva64 versão 1.00 em 2006) foi montado com o compilador MSVC. Com o lançamento de novos lançamentos C ++, o núcleo do analisador aprendeu a trabalhar em Linux e macOS, e a estrutura do projeto foi trocada para usar CMake. Mas no Windows, a construção ainda era feita usando o compilador MSVC. Em 29 de abril de 2019, os desenvolvedores do Visual Studio anunciaram a inclusão de um conjunto de utilitários LLVM e o compilador Clang em seu ambiente de desenvolvimento. E agora finalmente colocamos nossas mãos em ação para experimentá-lo.
Teste de performance
SelfTester. . , - , , . SelfTester " – ".
– . , , SelfTester' . , .
C++ Clang, SelfTester 11 .
13% — , , , ?
, . 8 , 1,6 ( ~500 - ).
, LTO ( ) .
, .
Clang
CMake .
Clang Visual Studio Installer.
Clang-cl — "", clang cl.exe. , MSBuild, .
LLVM, GitHub. , Visual Studio . toolset' llvm, clangcl, .
toolchain solution Visual Studio:
cmake -G "Visual Studio 16 2019" -Tclangcl <src>
GUI:
, . , , .
lang-cl CL, , .
, /W4 /WX. Clang , . :
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
....
if (WIN32)
add_compile_options(-Wno-error=deprecated-declarations
-Wno-error=reorder-ctor
-Wno-error=format-security
-Wno-error=macro-redefined
-Wno-error=bitwise-op-parentheses
-Wno-error=missing-field-initializers
-Wno-error=overloaded-virtual
-Wno-error=invalid-source-encoding
-Wno-error=multichar
-Wno-unused-local-typedef
-Wno-c++11-narrowing)
....
endif()
endif()
.
GCC Clang int128, MSVC Windows. Int128 Windows ( ifdef', C/C++). , :
if (MSVC)
set(DEFAULT_INT128_ASM ON)
else ()
set(DEFAULT_INT128_ASM OFF)
endif ()
if (MSVC AND NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(DEFAULT_INT128_ASM ON)
else ()
set(DEFAULT_INT128_ASM OFF)
endif ()
builtin' (lld) , clang.exe clang-cl.exe. MSBuild , , . , , .
if (CMAKE_GENERATOR MATCHES "Visual Studio")
link_libraries("$(LLVMInstallDir)\\lib\\clang\\\
${CMAKE_CXX_COMPILER_VERSION}\\lib\\windows\\\
clang_rt.builtins-x86_64.lib")
else()
link_libraries(clang_rt.builtins-x86_64)
endif()
! . :
- IntegerInterval, :
Dataflow- Int128, SIMD-. :
MOVAPS SIMD-. , 0, 8. , :
class alignas(16) Int128
.
- Docker-:
MSVC , Clang . , Windows Microsoft Visual C++ Redistributable. , .
, , 10%.
PVS-Studio Windows Clang.