mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Create safe helper for LLVMSetDLLStorageClass
This commit is contained in:
parent
eeb9035117
commit
ea7180813b
@ -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
|
||||
// existing logic below to set the Storage Class, but it has an
|
||||
// exemption for MinGW for backwards compatibility.
|
||||
unsafe {
|
||||
llvm::LLVMSetDLLStorageClass(llfn, llvm::DLLStorageClass::DllImport);
|
||||
}
|
||||
llvm::set_dllimport_storage_class(llfn);
|
||||
llfn
|
||||
} else {
|
||||
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()
|
||||
&& !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) {
|
||||
|
@ -375,9 +375,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
||||
// is actually present in the current crate. We can find out via the
|
||||
// is_codegened_item query.
|
||||
if !self.tcx.is_codegened_item(def_id) {
|
||||
unsafe {
|
||||
llvm::LLVMSetDLLStorageClass(g, llvm::DLLStorageClass::DllImport);
|
||||
}
|
||||
llvm::set_dllimport_storage_class(g);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -387,9 +385,7 @@ impl<'ll> CodegenCx<'ll, '_> {
|
||||
&& library.kind.is_dllimport()
|
||||
{
|
||||
// For foreign (native) libs we know the exact storage type to use.
|
||||
unsafe {
|
||||
llvm::LLVMSetDLLStorageClass(g, llvm::DLLStorageClass::DllImport);
|
||||
}
|
||||
llvm::set_dllimport_storage_class(g);
|
||||
}
|
||||
|
||||
self.instances.borrow_mut().insert(instance, g);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user