mstorsjo created this revision. mstorsjo added a reviewer: aaron.ballman. Herald added a project: All. mstorsjo requested review of this revision. Herald added a project: clang.
We shouldn't just check the clang options, we also should check `Triple::hasDefaultEmulatedTLS()`. This doesn't make any testable difference in this commit, because the check for emulated TLS is within a block for `TT.isWindowsGNUEnvironment()`, and `hasDefaultEmulatedTLS()` returns false for any such environment - but it makes the code from 0e4cf807aeaf54a10e02176498a7df13ac722b37 <https://reviews.llvm.org/rG0e4cf807aeaf54a10e02176498a7df13ac722b37> / D102970 <https://reviews.llvm.org/D102970> more correct and generic. Some mingw distributions carry a downstream patch, that enables emulated TLS by default for mingw targets in `hasDefaultEmulatedTLS()` - and for such cases, this patch does make a difference and fixes the detection of emulated TLS, if it is implicitly enabled. I'm open for better suggestions on where to place the `useEmulatedTLS()` helper function; it's a parallel to the preexisting `TargetMachine::useEmulatedTLS()` which does the same, within llvm. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D132848 Files: clang/lib/CodeGen/CodeGenModule.cpp clang/lib/CodeGen/CodeGenModule.h Index: clang/lib/CodeGen/CodeGenModule.h =================================================================== --- clang/lib/CodeGen/CodeGenModule.h +++ 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; } Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ 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<llvm::GlobalVariable>(GV) && - (!GV->isThreadLocal() || CGM.getCodeGenOpts().EmulatedTLS)) + (!GV->isThreadLocal() || CGM.useEmulatedTLS())) return false; }
Index: clang/lib/CodeGen/CodeGenModule.h =================================================================== --- clang/lib/CodeGen/CodeGenModule.h +++ 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; } Index: clang/lib/CodeGen/CodeGenModule.cpp =================================================================== --- clang/lib/CodeGen/CodeGenModule.cpp +++ 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<llvm::GlobalVariable>(GV) && - (!GV->isThreadLocal() || CGM.getCodeGenOpts().EmulatedTLS)) + (!GV->isThreadLocal() || CGM.useEmulatedTLS())) return false; }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits