https://github.com/momo5502 created https://github.com/llvm/llvm-project/pull/113830
This fixes #103484 >From b1b4da14386856667d11c284535348002954f94f Mon Sep 17 00:00:00 2001 From: momo5502 <mauriceheum...@gmail.com> Date: Sun, 27 Oct 2024 20:02:00 +0100 Subject: [PATCH] Add /Zc:tlsGuards- option --- clang/include/clang/Basic/LangOptions.def | 1 + clang/include/clang/Driver/Options.td | 11 +++++++++++ clang/lib/CodeGen/MicrosoftCXXABI.cpp | 1 + clang/lib/Driver/ToolChains/Clang.cpp | 4 ++++ 4 files changed, 17 insertions(+) diff --git a/clang/include/clang/Basic/LangOptions.def b/clang/include/clang/Basic/LangOptions.def index 68db400c22e6c1..bf2f23a2828176 100644 --- a/clang/include/clang/Basic/LangOptions.def +++ b/clang/include/clang/Basic/LangOptions.def @@ -186,6 +186,7 @@ COMPATIBLE_LANGOPT(RecoveryAST, 1, 1, "Preserve expressions in AST when encounte COMPATIBLE_LANGOPT(RecoveryASTType, 1, 1, "Preserve the type in recovery expressions") BENIGN_LANGOPT(ThreadsafeStatics , 1, 1, "thread-safe static initializers") +BENIGN_LANGOPT(TlsGuards , 1, 1, "on-demand TLS initialization") LANGOPT(POSIXThreads , 1, 0, "POSIX thread support") LANGOPT(Blocks , 1, 0, "blocks extension to C") BENIGN_LANGOPT(EmitAllDecls , 1, 0, "emitting all declarations") diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 5df6ddd5e6a0c5..84b1404c214511 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -4063,6 +4063,11 @@ defm threadsafe_statics : BoolFOption<"threadsafe-statics", NegFlag<SetFalse, [], [ClangOption, CC1Option], "Do not emit code to make initialization of local statics thread safe">, PosFlag<SetTrue>>; +defm tls_guards : BoolFOption<"tls-guards", + LangOpts<"TlsGuards">, DefaultTrue, + NegFlag<SetFalse, [], [ClangOption, CC1Option], + "Do not emit code to perform on-demand initialization of thread-local variables">, + PosFlag<SetTrue>>; def ftime_report : Flag<["-"], "ftime-report">, Group<f_Group>, Visibility<[ClangOption, CC1Option]>, MarshallingInfoFlag<CodeGenOpts<"TimePasses">>; @@ -8610,6 +8615,12 @@ def _SLASH_Zc_threadSafeInit : CLFlag<"Zc:threadSafeInit">, def _SLASH_Zc_threadSafeInit_ : CLFlag<"Zc:threadSafeInit-">, HelpText<"Disable thread-safe initialization of static variables">, Alias<fno_threadsafe_statics>; +def _SLASH_Zc_tlsGuards : CLFlag<"Zc:tlsGuards">, + HelpText<"Enable on-demand initialization of thread-local variables">, + Alias<ftls_guards>; +def _SLASH_Zc_tlsGuards_ : CLFlag<"Zc:tlsGuards-">, + HelpText<"Disable on-demand initialization of thread-local variables">, + Alias<fno_tls_guards>; def _SLASH_Zc_trigraphs : CLFlag<"Zc:trigraphs">, HelpText<"Enable trigraphs">, Alias<ftrigraphs>; def _SLASH_Zc_trigraphs_off : CLFlag<"Zc:trigraphs-">, diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index 0b0b45ffead92f..c705f3ad6e32ed 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/lib/CodeGen/MicrosoftCXXABI.cpp @@ -431,6 +431,7 @@ class MicrosoftCXXABI : public CGCXXABI { bool usesThreadWrapperFunction(const VarDecl *VD) const override { return getContext().getLangOpts().isCompatibleWithMSVC( LangOptions::MSVC2019_5) && + getContext().getLangOpts().TlsGuards && (!isEmittedWithConstantInitializer(VD) || mayNeedDestruction(VD)); } LValue EmitThreadLocalVarDeclLValue(CodeGenFunction &CGF, const VarDecl *VD, diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp index 04b3832327a99c..da659fa4db235d 100644 --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -7291,6 +7291,10 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA, (!IsWindowsMSVC || IsMSVC2015Compatible))) CmdArgs.push_back("-fno-threadsafe-statics"); + if (!Args.hasFlag(options::OPT_ftls_guards, + options::OPT_fno_tls_guards, true)) + CmdArgs.push_back("-fno-tls-guards"); + // Add -fno-assumptions, if it was specified. if (!Args.hasFlag(options::OPT_fassumptions, options::OPT_fno_assumptions, true)) _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits