Create safe helper for LLVMSetDLLStorageClass

This commit is contained in:
Oli Scherer 2025-02-14 17:27:49 +00:00
parent eeb9035117
commit ea7180813b
3 changed files with 10 additions and 10 deletions

View File

@ -66,9 +66,7 @@ pub(crate) fn get_fn<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'t
// LLVM will prefix the name with `__imp_`. Ideally, we'd like the // LLVM will prefix the name with `__imp_`. Ideally, we'd like the
// existing logic below to set the Storage Class, but it has an // existing logic below to set the Storage Class, but it has an
// exemption for MinGW for backwards compatibility. // exemption for MinGW for backwards compatibility.
unsafe { llvm::set_dllimport_storage_class(llfn);
llvm::LLVMSetDLLStorageClass(llfn, llvm::DLLStorageClass::DllImport);
}
llfn llfn
} else { } else {
cx.declare_fn(sym, fn_abi, Some(instance)) cx.declare_fn(sym, fn_abi, Some(instance))
@ -150,7 +148,7 @@ pub(crate) fn get_fn<'ll, 'tcx>(cx: &CodegenCx<'ll, 'tcx>, instance: Instance<'t
&& library.kind.is_dllimport() && library.kind.is_dllimport()
&& !matches!(tcx.sess.target.env.as_ref(), "gnu" | "uclibc") && !matches!(tcx.sess.target.env.as_ref(), "gnu" | "uclibc")
{ {
llvm::LLVMSetDLLStorageClass(llfn, llvm::DLLStorageClass::DllImport); llvm::set_dllimport_storage_class(llfn);
} }
if cx.should_assume_dso_local(llfn, true) { if cx.should_assume_dso_local(llfn, true) {

View File

@ -375,9 +375,7 @@ impl<'ll> CodegenCx<'ll, '_> {
// is actually present in the current crate. We can find out via the // is actually present in the current crate. We can find out via the
// is_codegened_item query. // is_codegened_item query.
if !self.tcx.is_codegened_item(def_id) { if !self.tcx.is_codegened_item(def_id) {
unsafe { llvm::set_dllimport_storage_class(g);
llvm::LLVMSetDLLStorageClass(g, llvm::DLLStorageClass::DllImport);
}
} }
} }
} }
@ -387,9 +385,7 @@ impl<'ll> CodegenCx<'ll, '_> {
&& library.kind.is_dllimport() && library.kind.is_dllimport()
{ {
// For foreign (native) libs we know the exact storage type to use. // For foreign (native) libs we know the exact storage type to use.
unsafe { llvm::set_dllimport_storage_class(g);
llvm::LLVMSetDLLStorageClass(g, llvm::DLLStorageClass::DllImport);
}
} }
self.instances.borrow_mut().insert(instance, g); self.instances.borrow_mut().insert(instance, g);

View File

@ -403,3 +403,9 @@ pub(crate) fn add_module_flag_str(
); );
} }
} }
pub(crate) fn set_dllimport_storage_class<'ll>(v: &'ll Value) {
unsafe {
LLVMSetDLLStorageClass(v, DLLStorageClass::DllImport);
}
}