]> granicus.if.org Git - clang/commit
win: Enable /Zc:twoPhase by default if targeting MSVC 2017 update 3 or newer
authorNico Weber <nicolasweber@gmx.de>
Tue, 20 Aug 2019 16:28:11 +0000 (16:28 +0000)
committerNico Weber <nicolasweber@gmx.de>
Tue, 20 Aug 2019 16:28:11 +0000 (16:28 +0000)
commit8e55d9ccb026f6ed09396161e87d29fc49a9750d
treee4395159fba94adbd1830153d1e2940da61f0cd8
parente39526655ee2cfa8a6e4a3ef538049a1aa076532
win: Enable /Zc:twoPhase by default if targeting MSVC 2017 update 3 or newer

MSVC 2017 update 3 (_MSC_VER 1911) enables /Zc:twoPhase by default, and
so should clang-cl:
https://docs.microsoft.com/en-us/cpp/build/reference/zc-twophase

clang-cl takes the MSVC version it emulates from the -fmsc-version flag,
or if that's not passed it tries to check what the installed version of
MSVC is and uses that, and failing that it uses a default version that's
currently 1911. So this changes the default if no -fmsc-version flag is
passed and no installed MSVC is detected. (It also changes the default
if -fmsc-version is passed or MSVC is detected, and either indicates
_MSC_VER >= 1911.)

As mentioned in the MSDN article, the Windows SDK header files in
version 10.0.15063.0 (Creators Update or Redstone 2) and earlier
versions do not work correctly with /Zc:twoPhase. If you need to use
these old SDKs with a new clang-cl, explicitly pass /Zc:twoPhase- to get
the old behavior.

Fixes PR43032.

Differential Revision: https://reviews.llvm.org/D66394

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@369402 91177308-0d34-0410-b5e6-96231b3b80d8
docs/ReleaseNotes.rst
include/clang/Driver/CLCompatOptions.td
lib/Driver/ToolChains/Clang.cpp
test/Driver/cl-options.c