Also add an API to check if an instance has body
This is much cheaper than building a body just for the purpose of checking if the body exists.
This commit is contained in:
parent
1bcd162465
commit
4a75d1893e
@ -39,6 +39,14 @@ impl Instance {
|
||||
with(|context| context.instance_body(self.def))
|
||||
}
|
||||
|
||||
/// Check whether this instance has a body available.
|
||||
///
|
||||
/// This call is much cheaper than `instance.body().is_some()`, since it doesn't try to build
|
||||
/// the StableMIR body.
|
||||
pub fn has_body(&self) -> bool {
|
||||
with(|cx| cx.has_body(self.def.def_id()))
|
||||
}
|
||||
|
||||
pub fn is_foreign_item(&self) -> bool {
|
||||
with(|cx| cx.is_foreign_item(self.def.def_id()))
|
||||
}
|
||||
|
@ -64,9 +64,12 @@ fn test_body(body: mir::Body) {
|
||||
let RigidTy::FnDef(def, args) = ty else { unreachable!() };
|
||||
let instance = Instance::resolve(def, &args).unwrap();
|
||||
let mangled_name = instance.mangled_name();
|
||||
let body = instance.body();
|
||||
assert!(body.is_some() || (mangled_name == "setpwent"), "Failed: {func:?}");
|
||||
assert!(body.is_some() ^ instance.is_foreign_item());
|
||||
assert!(instance.has_body() || (mangled_name == "setpwent"), "Failed: {func:?}");
|
||||
assert!(instance.has_body() ^ instance.is_foreign_item());
|
||||
if instance.has_body() {
|
||||
let body = instance.body().unwrap();
|
||||
assert!(!body.locals().is_empty(), "Body must at least have a return local");
|
||||
}
|
||||
}
|
||||
Goto { .. } | Assert { .. } | SwitchInt { .. } | Return | Drop { .. } => {
|
||||
/* Do nothing */
|
||||
|
Loading…
x
Reference in New Issue
Block a user