mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-06 04:08: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
|
// 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) {
|
||||||
|
@ -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);
|
||||||
|
@ -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