#[non_exhaustive]pub enum BuildError {
AlreadyTerminated {
block: Block,
},
UnknownBlock {
block: Block,
},
UnknownInst {
inst: Inst,
},
UnknownValue {
value: Value,
},
UnknownParam {
index: usize,
},
EntryBlock,
UnknownBlockParam {
block: Block,
index: usize,
},
Invalid(ValidationErrorKind),
CapacityExceeded,
}Expand description
Why a Builder operation was refused.
The builder checks each instruction and terminator as it is added, so a lowering bug is reported at the call that caused it. Nothing is ever changed by a refused operation.
§Examples
use ir_lang::{BuildError, Linkage, Module, Signature};
let mut m = Module::new("m");
let f = m.declare_function("f", &Signature::new(&[], &[]), Linkage::Export)?;
let mut b = m.build(f)?;
b.ret(&[])?;
// A terminator is never silently overwritten.
let entry = b.func().entry();
assert_eq!(b.unreachable(), Err(BuildError::AlreadyTerminated { block: entry }));Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
AlreadyTerminated
The block already has a terminator. Remove it first
(Builder::remove_terminator) to replace it.
UnknownBlock
The block handle is unknown or the block was removed.
UnknownInst
The instruction handle is unknown or the instruction was removed.
UnknownValue
The value handle is unknown.
UnknownParam
There is no function parameter at this index.
EntryBlock
The entry block cannot be removed or split off.
UnknownBlockParam
A block parameter index is out of range.
Invalid(ValidationErrorKind)
The instruction or terminator is ill-formed.
CapacityExceeded
A function table reached its capacity (u32::MAX - 1 entries).
Trait Implementations§
Source§impl Clone for BuildError
impl Clone for BuildError
Source§impl Debug for BuildError
impl Debug for BuildError
Source§impl Display for BuildError
impl Display for BuildError
impl Eq for BuildError
Source§impl Error for BuildError
impl Error for BuildError
1.30.0 · Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
Returns the lower-level source of this error, if any. Read more
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
👎Deprecated since 1.42.0:
use the Display impl or to_string()
Source§impl From<ValidationErrorKind> for BuildError
impl From<ValidationErrorKind> for BuildError
Source§fn from(kind: ValidationErrorKind) -> Self
fn from(kind: ValidationErrorKind) -> Self
Converts to this type from the input type.
Source§impl PartialEq for BuildError
impl PartialEq for BuildError
impl StructuralPartialEq for BuildError
Auto Trait Implementations§
impl Freeze for BuildError
impl RefUnwindSafe for BuildError
impl Send for BuildError
impl Sync for BuildError
impl Unpin for BuildError
impl UnsafeUnpin for BuildError
impl UnwindSafe for BuildError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more