mirror of
https://github.com/rust-lang/rust.git
synced 2025-05-14 02:49:40 +00:00
Rename OperandBundleOwned
to OperandBundleBox
As with `DIBuilderBox`, the "Box" suffix does a better job of communicating that this is an owning pointer to some borrowable resource. This also renames the `raw` method to `as_ref`, which is what it would have been named originally if the `Deref` problem had been known at the time.
This commit is contained in:
parent
9a7e19f2b6
commit
dbdbde2a72
@ -361,7 +361,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||||||
|
|
||||||
// Emit KCFI operand bundle
|
// Emit KCFI operand bundle
|
||||||
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
||||||
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.raw()) {
|
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.as_ref()) {
|
||||||
bundles.push(kcfi_bundle);
|
bundles.push(kcfi_bundle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1416,7 +1416,7 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
|
|||||||
|
|
||||||
// Emit KCFI operand bundle
|
// Emit KCFI operand bundle
|
||||||
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
||||||
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.raw()) {
|
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.as_ref()) {
|
||||||
bundles.push(kcfi_bundle);
|
bundles.push(kcfi_bundle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1749,7 +1749,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
|||||||
|
|
||||||
// Emit KCFI operand bundle
|
// Emit KCFI operand bundle
|
||||||
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
let kcfi_bundle = self.kcfi_operand_bundle(fn_attrs, fn_abi, instance, llfn);
|
||||||
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.raw()) {
|
if let Some(kcfi_bundle) = kcfi_bundle.as_ref().map(|b| b.as_ref()) {
|
||||||
bundles.push(kcfi_bundle);
|
bundles.push(kcfi_bundle);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1836,7 +1836,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
|||||||
fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>,
|
fn_abi: Option<&FnAbi<'tcx, Ty<'tcx>>>,
|
||||||
instance: Option<Instance<'tcx>>,
|
instance: Option<Instance<'tcx>>,
|
||||||
llfn: &'ll Value,
|
llfn: &'ll Value,
|
||||||
) -> Option<llvm::OperandBundleOwned<'ll>> {
|
) -> Option<llvm::OperandBundleBox<'ll>> {
|
||||||
let is_indirect_call = unsafe { llvm::LLVMRustIsNonGVFunctionPointerTy(llfn) };
|
let is_indirect_call = unsafe { llvm::LLVMRustIsNonGVFunctionPointerTy(llfn) };
|
||||||
let kcfi_bundle = if self.tcx.sess.is_sanitizer_kcfi_enabled()
|
let kcfi_bundle = if self.tcx.sess.is_sanitizer_kcfi_enabled()
|
||||||
&& let Some(fn_abi) = fn_abi
|
&& let Some(fn_abi) = fn_abi
|
||||||
@ -1862,7 +1862,7 @@ impl<'a, 'll, 'tcx> Builder<'a, 'll, 'tcx> {
|
|||||||
kcfi::typeid_for_fnabi(self.tcx, fn_abi, options)
|
kcfi::typeid_for_fnabi(self.tcx, fn_abi, options)
|
||||||
};
|
};
|
||||||
|
|
||||||
Some(llvm::OperandBundleOwned::new("kcfi", &[self.const_u32(kcfi_typeid)]))
|
Some(llvm::OperandBundleBox::new("kcfi", &[self.const_u32(kcfi_typeid)]))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
@ -67,12 +67,12 @@ use crate::value::Value;
|
|||||||
/// the `OperandBundleDef` value created for MSVC landing pads.
|
/// the `OperandBundleDef` value created for MSVC landing pads.
|
||||||
pub(crate) struct Funclet<'ll> {
|
pub(crate) struct Funclet<'ll> {
|
||||||
cleanuppad: &'ll Value,
|
cleanuppad: &'ll Value,
|
||||||
operand: llvm::OperandBundleOwned<'ll>,
|
operand: llvm::OperandBundleBox<'ll>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'ll> Funclet<'ll> {
|
impl<'ll> Funclet<'ll> {
|
||||||
pub(crate) fn new(cleanuppad: &'ll Value) -> Self {
|
pub(crate) fn new(cleanuppad: &'ll Value) -> Self {
|
||||||
Funclet { cleanuppad, operand: llvm::OperandBundleOwned::new("funclet", &[cleanuppad]) }
|
Funclet { cleanuppad, operand: llvm::OperandBundleBox::new("funclet", &[cleanuppad]) }
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn cleanuppad(&self) -> &'ll Value {
|
pub(crate) fn cleanuppad(&self) -> &'ll Value {
|
||||||
@ -80,7 +80,7 @@ impl<'ll> Funclet<'ll> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn bundle(&self) -> &llvm::OperandBundle<'ll> {
|
pub(crate) fn bundle(&self) -> &llvm::OperandBundle<'ll> {
|
||||||
self.operand.raw()
|
self.operand.as_ref()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -363,12 +363,13 @@ pub(crate) fn last_error() -> Option<String> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Owns an [`OperandBundle`], and will dispose of it when dropped.
|
/// Owning pointer to an [`OperandBundle`] that will dispose of the bundle
|
||||||
pub(crate) struct OperandBundleOwned<'a> {
|
/// when dropped.
|
||||||
|
pub(crate) struct OperandBundleBox<'a> {
|
||||||
raw: ptr::NonNull<OperandBundle<'a>>,
|
raw: ptr::NonNull<OperandBundle<'a>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> OperandBundleOwned<'a> {
|
impl<'a> OperandBundleBox<'a> {
|
||||||
pub(crate) fn new(name: &str, vals: &[&'a Value]) -> Self {
|
pub(crate) fn new(name: &str, vals: &[&'a Value]) -> Self {
|
||||||
let raw = unsafe {
|
let raw = unsafe {
|
||||||
LLVMCreateOperandBundle(
|
LLVMCreateOperandBundle(
|
||||||
@ -378,21 +379,21 @@ impl<'a> OperandBundleOwned<'a> {
|
|||||||
vals.len() as c_uint,
|
vals.len() as c_uint,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
OperandBundleOwned { raw: ptr::NonNull::new(raw).unwrap() }
|
Self { raw: ptr::NonNull::new(raw).unwrap() }
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns inner `OperandBundle` type.
|
/// Dereferences to the underlying `&OperandBundle`.
|
||||||
///
|
///
|
||||||
/// This could be a `Deref` implementation, but `OperandBundle` contains an extern type and
|
/// This can't be a `Deref` implementation because `OperandBundle` transitively
|
||||||
/// `Deref::Target: ?Sized`.
|
/// contains an extern type, which is incompatible with `Deref::Target: ?Sized`.
|
||||||
pub(crate) fn raw(&self) -> &OperandBundle<'a> {
|
pub(crate) fn as_ref(&self) -> &OperandBundle<'a> {
|
||||||
// SAFETY: The returned reference is opaque and can only used for FFI.
|
// SAFETY: The returned reference is opaque and can only used for FFI.
|
||||||
// It is valid for as long as `&self` is.
|
// It is valid for as long as `&self` is.
|
||||||
unsafe { self.raw.as_ref() }
|
unsafe { self.raw.as_ref() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for OperandBundleOwned<'_> {
|
impl Drop for OperandBundleBox<'_> {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
unsafe {
|
unsafe {
|
||||||
LLVMDisposeOperandBundle(self.raw);
|
LLVMDisposeOperandBundle(self.raw);
|
||||||
|
Loading…
Reference in New Issue
Block a user