From ce207ee9531007b10ddb9985dc0f83e764b21f32 Mon Sep 17 00:00:00 2001 From: Nick Fitzgerald Date: Thu, 30 Sep 2021 09:49:23 -0700 Subject: [PATCH] Check that integer literals are a primitive type --- cranelift/isle/isle/src/sema.rs | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/cranelift/isle/isle/src/sema.rs b/cranelift/isle/isle/src/sema.rs index d1d8213edb..9a6641fb61 100644 --- a/cranelift/isle/isle/src/sema.rs +++ b/cranelift/isle/isle/src/sema.rs @@ -1376,7 +1376,19 @@ impl TermEnv { Some(Expr::Var(bv.ty, bv.id)) } - &ast::Expr::ConstInt { val, .. } => Some(Expr::ConstInt(ty, val)), + &ast::Expr::ConstInt { val, pos } => { + if !tyenv.types[ty.index()].is_prim() { + tyenv.report_error( + pos, + format!( + "expected non-primitive type {}, but found integer literal '{}'", + tyenv.types[ty.index()].name(tyenv), + val, + ), + ); + } + Some(Expr::ConstInt(ty, val)) + } &ast::Expr::ConstPrim { ref val, pos } => { let val = tyenv.intern_mut(val); let const_ty = match tyenv.const_types.get(&val) {