From: Hans Wennborg Date: Wed, 9 Nov 2016 00:56:42 +0000 (+0000) Subject: clang-cl: Pass /Zc:threadSafeInit through to MSVC with /fallback (PR30948) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=150955a753da265e4bf1870291295489a5046822;p=clang clang-cl: Pass /Zc:threadSafeInit through to MSVC with /fallback (PR30948) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@286324 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 386b1d3bd2..45ba699652 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -10978,6 +10978,14 @@ std::unique_ptr visualstudio::Compiler::GetCommand( options::OPT__SLASH_MT, options::OPT__SLASH_MTd)) A->render(Args, CmdArgs); + // Use MSVC's default threadsafe statics behaviour unless there was a flag. + if (Arg *A = Args.getLastArg(options::OPT_fthreadsafe_statics, + options::OPT_fno_threadsafe_statics)) { + CmdArgs.push_back(A->getOption().getID() == options::OPT_fthreadsafe_statics + ? "/Zc:threadSafeInit" + : "/Zc:threadSafeInit-"); + } + // Pass through all unknown arguments so that the fallback command can see // them too. Args.AddAllArgs(CmdArgs, options::OPT_UNKNOWN); diff --git a/test/Driver/cl-fallback.c b/test/Driver/cl-fallback.c index e73f7c03c2..2e5698ce9f 100644 --- a/test/Driver/cl-fallback.c +++ b/test/Driver/cl-fallback.c @@ -46,6 +46,12 @@ // GS: cl.exe // GS: "/GS-" +// RUN: %clang_cl /fallback /Zc:threadSafeInit -### -- %s 2>&1 | FileCheck -check-prefix=ThreadSafe %s +// ThreadSafe: /Zc:threadSafeInit + +// RUN: %clang_cl /fallback /Zc:threadSafeInit- -### -- %s 2>&1 | FileCheck -check-prefix=NonThreadSafe %s +// NonThreadSafe: /Zc:threadSafeInit- + // RUN: %clang_cl /fallback /Od -### -- %s 2>&1 | FileCheck -check-prefix=O0 %s // O0: cl.exe // O0: "/Od"