diff options
| author | bors <bors@rust-lang.org> | 2025-05-30 15:39:56 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2025-05-30 15:39:56 +0000 |
| commit | 15825b7161f8bd6a3482211fbf6727a52aa1166b (patch) | |
| tree | d8bddbd1c821b550409e1d04b749a921f1cb43fe /compiler/rustc_codegen_llvm/src/builder.rs | |
| parent | aa5832b142a2bfd322659d60f5d57e25d2a1bd5d (diff) | |
| parent | e4d9b06cc81743210c1aa267397b394cb0335ed1 (diff) | |
| download | rust-15825b7161f8bd6a3482211fbf6727a52aa1166b.tar.gz rust-15825b7161f8bd6a3482211fbf6727a52aa1166b.zip | |
Auto merge of #139385 - joboet:threadlocal_address, r=nikic
rustc_codegen_llvm: use `threadlocal.address` intrinsic to access TLS Fixes #136044 r? `@nikic`
Diffstat (limited to 'compiler/rustc_codegen_llvm/src/builder.rs')
| -rw-r--r-- | compiler/rustc_codegen_llvm/src/builder.rs | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/compiler/rustc_codegen_llvm/src/builder.rs b/compiler/rustc_codegen_llvm/src/builder.rs index fcb55a04635..167678c2ff1 100644 --- a/compiler/rustc_codegen_llvm/src/builder.rs +++ b/compiler/rustc_codegen_llvm/src/builder.rs @@ -1452,9 +1452,15 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> { impl<'ll> StaticBuilderMethods for Builder<'_, 'll, '_> { fn get_static(&mut self, def_id: DefId) -> &'ll Value { // Forward to the `get_static` method of `CodegenCx` - let s = self.cx().get_static(def_id); - // Cast to default address space if globals are in a different addrspace - self.cx().const_pointercast(s, self.type_ptr()) + let global = self.cx().get_static(def_id); + if self.cx().tcx.is_thread_local_static(def_id) { + let pointer = self.call_intrinsic("llvm.threadlocal.address", &[global]); + // Cast to default address space if globals are in a different addrspace + self.pointercast(pointer, self.type_ptr()) + } else { + // Cast to default address space if globals are in a different addrspace + self.cx().const_pointercast(global, self.type_ptr()) + } } } |
