diff --git a/clang/lib/CodeGen/CodeGenModule.h b/clang/lib/CodeGen/CodeGenModule.h --- a/clang/lib/CodeGen/CodeGenModule.h +++ b/clang/lib/CodeGen/CodeGenModule.h @@ -746,6 +746,12 @@ const TargetCodeGenInfo &getTargetCodeGenInfo(); + bool useEmulatedTLS() const { + if (CodeGenOpts.ExplicitEmulatedTLS) + return CodeGenOpts.EmulatedTLS; + return getTriple().hasDefaultEmulatedTLS(); + } + CodeGenTypes &getTypes() { return Types; } CodeGenVTables &getVTables() { return VTables; } diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1154,7 +1154,7 @@ // such variables can't be marked as DSO local. (Native TLS variables // can't be dllimported at all, though.) if (GV->isDeclarationForLinker() && isa(GV) && - (!GV->isThreadLocal() || CGM.getCodeGenOpts().EmulatedTLS)) + (!GV->isThreadLocal() || CGM.useEmulatedTLS())) return false; }