Skip to content

Commit

Permalink
Update ISLE error message: unknown term in expr, not pattern. (#4775)
Browse files Browse the repository at this point in the history
This was likely a copy-paste from the `ast::Pattern` case, but here it
is checking a term name in `ast::Expr` and so should say "... in
expression", not "... in pattern".
  • Loading branch information
cfallin authored Aug 24, 2022
1 parent b8b6f27 commit c664fb6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
6 changes: 6 additions & 0 deletions cranelift/isle/isle/isle_examples/fail/extra_parens.isle
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
(type u32 (primitive u32))

(decl f (u32) u32)
;; Should get an error about `x` not being a term, with a suggestion that it is
;; a bound var instead.
(rule (f x) (x))
14 changes: 13 additions & 1 deletion cranelift/isle/isle/src/sema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1782,7 +1782,19 @@ impl TermEnv {
let tid = match self.term_map.get(&name) {
Some(t) => t,
None => {
tyenv.report_error(pos, format!("Unknown term in pattern: '{}'", sym.0));
// Maybe this was actually a variable binding and the user has placed
// parens around it by mistake? (See #4775.)
if bindings.vars.iter().any(|b| b.name == name) {
tyenv.report_error(
pos,
format!(
"Unknown term in expression: '{}'. Variable binding under this name exists; try removing the parens?", sym.0));
} else {
tyenv.report_error(
pos,
format!("Unknown term in expression: '{}'", sym.0),
);
}
return None;
}
};
Expand Down

0 comments on commit c664fb6

Please sign in to comment.