Reverted in r369647 due to https://bugs.chromium.org/p/chromium/issues/detail?id=996675
On Tue, Aug 20, 2019 at 6:26 PM Nico Weber via cfe-commits <cfe-commits@lists.llvm.org> wrote: > > Author: nico > Date: Tue Aug 20 09:28:11 2019 > New Revision: 369402 > > URL: http://llvm.org/viewvc/llvm-project?rev=369402&view=rev > Log: > 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 > > Modified: > cfe/trunk/docs/ReleaseNotes.rst > cfe/trunk/include/clang/Driver/CLCompatOptions.td > cfe/trunk/lib/Driver/ToolChains/Clang.cpp > cfe/trunk/test/Driver/cl-options.c > > Modified: cfe/trunk/docs/ReleaseNotes.rst > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/ReleaseNotes.rst?rev=369402&r1=369401&r2=369402&view=diff > ============================================================================== > --- cfe/trunk/docs/ReleaseNotes.rst (original) > +++ cfe/trunk/docs/ReleaseNotes.rst Tue Aug 20 09:28:11 2019 > @@ -90,6 +90,9 @@ Attribute Changes in Clang > Windows Support > --------------- > > +- clang-cl now defaults to ``/Zc:twoPhase`` if targeting MSVC2017 update 3 or > + later (``_MSC_VER`` >= 1911). This matches MSVC's behavior. Explicitly pass > + ``/Zc:twoPhase-`` to restore the old behavior. > - ... > > C Language Changes in Clang > > Modified: cfe/trunk/include/clang/Driver/CLCompatOptions.td > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/CLCompatOptions.td?rev=369402&r1=369401&r2=369402&view=diff > ============================================================================== > --- cfe/trunk/include/clang/Driver/CLCompatOptions.td (original) > +++ cfe/trunk/include/clang/Driver/CLCompatOptions.td Tue Aug 20 09:28:11 2019 > @@ -235,10 +235,10 @@ def _SLASH_Zc_trigraphs : CLFlag<"Zc:tri > def _SLASH_Zc_trigraphs_off : CLFlag<"Zc:trigraphs-">, > HelpText<"Disable trigraphs (default)">, Alias<fno_trigraphs>; > def _SLASH_Zc_twoPhase : CLFlag<"Zc:twoPhase">, > - HelpText<"Enable two-phase name lookup in templates">, > + HelpText<"Enable two-phase name lookup in templates (default)">, > Alias<fno_delayed_template_parsing>; > def _SLASH_Zc_twoPhase_ : CLFlag<"Zc:twoPhase-">, > - HelpText<"Disable two-phase name lookup in templates (default)">, > + HelpText<"Disable two-phase name lookup in templates">, > Alias<fdelayed_template_parsing>; > def _SLASH_Z7 : CLFlag<"Z7">, > HelpText<"Enable CodeView debug information in object files">; > > Modified: cfe/trunk/lib/Driver/ToolChains/Clang.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Clang.cpp?rev=369402&r1=369401&r2=369402&view=diff > ============================================================================== > --- cfe/trunk/lib/Driver/ToolChains/Clang.cpp (original) > +++ cfe/trunk/lib/Driver/ToolChains/Clang.cpp Tue Aug 20 09:28:11 2019 > @@ -4883,12 +4883,14 @@ void Clang::ConstructJob(Compilation &C, > !IsWindowsMSVC || IsMSVC2015Compatible)) > CmdArgs.push_back("-fno-threadsafe-statics"); > > - // -fno-delayed-template-parsing is default, except when targeting MSVC. > - // Many old Windows SDK versions require this to parse. > - // FIXME: MSVC introduced /Zc:twoPhase- to disable this behavior in their > - // compiler. We should be able to disable this by default at some point. > + // -fno-delayed-template-parsing is default, except when targeting MSVC > + // earlier than MSVC 2017 15.3 (_MSC_VER 1911). Windows SDK versions > + // 10.0.15063.0 (Creators Update or Redstone 2) and earlier require this to > + // parse. > + bool IsMSVCBefore2017Update3 = !MSVT.empty() && MSVT < VersionTuple(19, > 11); > if (Args.hasFlag(options::OPT_fdelayed_template_parsing, > - options::OPT_fno_delayed_template_parsing, IsWindowsMSVC)) > + options::OPT_fno_delayed_template_parsing, > + IsMSVCBefore2017Update3)) > CmdArgs.push_back("-fdelayed-template-parsing"); > > // -fgnu-keywords default varies depending on language; only pass if > > Modified: cfe/trunk/test/Driver/cl-options.c > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/cl-options.c?rev=369402&r1=369401&r2=369402&view=diff > ============================================================================== > --- cfe/trunk/test/Driver/cl-options.c (original) > +++ cfe/trunk/test/Driver/cl-options.c Tue Aug 20 09:28:11 2019 > @@ -316,13 +316,19 @@ > > // We recognize -f[no-]delayed-template-parsing. > // /Zc:twoPhase[-] has the opposite meaning. > -// RUN: %clang_cl -c -### -- %s 2>&1 | FileCheck > -check-prefix=DELAYEDDEFAULT %s > -// DELAYEDDEFAULT: "-fdelayed-template-parsing" > -// RUN: %clang_cl -c -fdelayed-template-parsing -### -- %s 2>&1 | FileCheck > -check-prefix=DELAYEDON %s > -// RUN: %clang_cl -c /Zc:twoPhase- -### -- %s 2>&1 | FileCheck > -check-prefix=DELAYEDON %s > +// RUN: %clang_cl -c -fmsc-version=1910 -### -- %s 2>&1 | FileCheck > -check-prefix=OLDDELAYEDDEFAULT %s > +// OLDDELAYEDDEFAULT: "-fdelayed-template-parsing" > +// RUN: %clang_cl -fmsc-version=1911 -c -### -- %s 2>&1 | FileCheck > -check-prefix=NEWDELAYEDDEFAULT %s > +// NEWDELAYEDDEFAULT-NOT: "-fdelayed-template-parsing" > +// RUN: %clang_cl -c -fmsc-version=1910 -fdelayed-template-parsing -### -- > %s 2>&1 | FileCheck -check-prefix=DELAYEDON %s > +// RUN: %clang_cl -c -fmsc-version=1911 -fdelayed-template-parsing -### -- > %s 2>&1 | FileCheck -check-prefix=DELAYEDON %s > +// RUN: %clang_cl -c -fmsc-version=1910 /Zc:twoPhase- -### -- %s 2>&1 | > FileCheck -check-prefix=DELAYEDON %s > +// RUN: %clang_cl -c -fmsc-version=1911 /Zc:twoPhase- -### -- %s 2>&1 | > FileCheck -check-prefix=DELAYEDON %s > // DELAYEDON: "-fdelayed-template-parsing" > -// RUN: %clang_cl -c -fno-delayed-template-parsing -### -- %s 2>&1 | > FileCheck -check-prefix=DELAYEDOFF %s > -// RUN: %clang_cl -c /Zc:twoPhase -### -- %s 2>&1 | FileCheck > -check-prefix=DELAYEDOFF %s > +// RUN: %clang_cl -c -fmsc-version=1910 -fno-delayed-template-parsing -### > -- %s 2>&1 | FileCheck -check-prefix=DELAYEDOFF %s > +// RUN: %clang_cl -c -fmsc-version=1911 -fno-delayed-template-parsing -### > -- %s 2>&1 | FileCheck -check-prefix=DELAYEDOFF %s > +// RUN: %clang_cl -c -fmsc-version=1910 /Zc:twoPhase -### -- %s 2>&1 | > FileCheck -check-prefix=DELAYEDOFF %s > +// RUN: %clang_cl -c -fmsc-version=1911 /Zc:twoPhase -### -- %s 2>&1 | > FileCheck -check-prefix=DELAYEDOFF %s > // DELAYEDOFF-NOT: "-fdelayed-template-parsing" > > // RUN: %clang_cl -c -### /std:c++latest -- %s 2>&1 | FileCheck > -check-prefix CHECK-LATEST-CHAR8_T %s > > > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits