ISLE: fix compile fuzz target, and fix a simple error-reporting bug. (#3845)
It seems our `compile` fuzz target for ISLE has not been regularly tested, as it was never updated for the `isle` -> `cranelift_isle` crate renaming. This PR fixes it to compile again. This also includes a simple fix in the typechecking: when verifying that a term decl is valid, we might insert a term ID into the name->ID map before fully checking that all of the types exist, and then skipping (for error recovery purposes) the actual push onto the term-signature vector if one of the types does have an error. This phantom TID can later cause a panic. The fix is to avoid adding to the map until we have fully verified the term decl.
This commit is contained in:
@@ -805,7 +805,6 @@ impl TermEnv {
|
||||
for def in &defs.defs {
|
||||
match def {
|
||||
&ast::Def::Decl(ref decl) => {
|
||||
let tid = TermId(self.terms.len());
|
||||
let name = tyenv.intern_mut(&decl.term);
|
||||
if let Some(tid) = self.term_map.get(&name) {
|
||||
tyenv.report_error(
|
||||
@@ -817,7 +816,6 @@ impl TermEnv {
|
||||
format!("Duplicate decl for '{}'", decl.term.0),
|
||||
);
|
||||
}
|
||||
self.term_map.insert(name, tid);
|
||||
|
||||
let arg_tys = decl
|
||||
.arg_tys
|
||||
@@ -850,6 +848,8 @@ impl TermEnv {
|
||||
}
|
||||
};
|
||||
|
||||
let tid = TermId(self.terms.len());
|
||||
self.term_map.insert(name, tid);
|
||||
self.terms.push(Term {
|
||||
id: tid,
|
||||
decl_pos: decl.pos,
|
||||
|
||||
Reference in New Issue
Block a user