summaryrefslogtreecommitdiff
path: root/compiler/rustc_ty_utils
diff options
context:
space:
mode:
authorJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2023-02-03 09:04:12 +0100
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2023-03-29 08:55:21 +0200
commit0d89c6a2d44b78d052280d7faecfcb79e6f3d4a1 (patch)
treef12f0f686444926ccc3cd203daa6d9ad087687d3 /compiler/rustc_ty_utils
parent51c93553d4344472f2e291b3a4f110f884062a37 (diff)
downloadrust-0d89c6a2d44b78d052280d7faecfcb79e6f3d4a1.tar.gz
Support TLS access into dylibs on Windows
Diffstat (limited to 'compiler/rustc_ty_utils')
-rw-r--r--compiler/rustc_ty_utils/src/abi.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/compiler/rustc_ty_utils/src/abi.rs b/compiler/rustc_ty_utils/src/abi.rs
index ee5a7909ba3..271284b2d81 100644
--- a/compiler/rustc_ty_utils/src/abi.rs
+++ b/compiler/rustc_ty_utils/src/abi.rs
@@ -3,7 +3,7 @@ use rustc_hir::lang_items::LangItem;
use rustc_middle::ty::layout::{
fn_can_unwind, FnAbiError, HasParamEnv, HasTyCtxt, LayoutCx, LayoutOf, TyAndLayout,
};
-use rustc_middle::ty::{self, Ty, TyCtxt};
+use rustc_middle::ty::{self, InstanceDef, Ty, TyCtxt};
use rustc_session::config::OptLevel;
use rustc_span::def_id::DefId;
use rustc_target::abi::call::{
@@ -29,6 +29,16 @@ fn fn_sig_for_fn_abi<'tcx>(
instance: ty::Instance<'tcx>,
param_env: ty::ParamEnv<'tcx>,
) -> ty::PolyFnSig<'tcx> {
+ if let InstanceDef::ThreadLocalShim(..) = instance.def {
+ return ty::Binder::dummy(tcx.mk_fn_sig(
+ [],
+ tcx.thread_local_ptr_ty(instance.def_id()),
+ false,
+ hir::Unsafety::Normal,
+ rustc_target::spec::abi::Abi::Unadjusted,
+ ));
+ }
+
let ty = instance.ty(tcx, param_env);
match *ty.kind() {
ty::FnDef(..) => {