Improve assertion messages in Module finalization.
When an object being finalized references an object declared as needing a definition, the definition needs to be available. Add asserts to catch this specific case.
This commit is contained in:
@@ -263,7 +263,13 @@ where
|
|||||||
name: &ir::ExternalName,
|
name: &ir::ExternalName,
|
||||||
) -> (Option<&B::CompiledFunction>, &str, &ir::Signature) {
|
) -> (Option<&B::CompiledFunction>, &str, &ir::Signature) {
|
||||||
let info = self.contents.get_function_info(name);
|
let info = self.contents.get_function_info(name);
|
||||||
|
debug_assert!(
|
||||||
|
!info.decl.linkage.is_definable() || info.compiled.is_some(),
|
||||||
|
"Finalization requires a definition for function {}.",
|
||||||
|
name,
|
||||||
|
);
|
||||||
debug_assert_eq!(info.decl.linkage.is_definable(), info.compiled.is_some());
|
debug_assert_eq!(info.decl.linkage.is_definable(), info.compiled.is_some());
|
||||||
|
|
||||||
(
|
(
|
||||||
info.compiled.as_ref(),
|
info.compiled.as_ref(),
|
||||||
&info.decl.name,
|
&info.decl.name,
|
||||||
@@ -278,7 +284,13 @@ where
|
|||||||
name: &ir::ExternalName,
|
name: &ir::ExternalName,
|
||||||
) -> (Option<&B::CompiledData>, &str, bool) {
|
) -> (Option<&B::CompiledData>, &str, bool) {
|
||||||
let info = self.contents.get_data_info(name);
|
let info = self.contents.get_data_info(name);
|
||||||
|
debug_assert!(
|
||||||
|
!info.decl.linkage.is_definable() || info.compiled.is_some(),
|
||||||
|
"Finalization requires a definition for data object {}.",
|
||||||
|
name,
|
||||||
|
);
|
||||||
debug_assert_eq!(info.decl.linkage.is_definable(), info.compiled.is_some());
|
debug_assert_eq!(info.decl.linkage.is_definable(), info.compiled.is_some());
|
||||||
|
|
||||||
(info.compiled.as_ref(), &info.decl.name, info.decl.writable)
|
(info.compiled.as_ref(), &info.decl.name, info.decl.writable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user