diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c102eb7d8b..bf7fb2a1daf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ **Fixes**: - Support expressions on left hand side of `std.in` operator. (@kgutwin, #4498) +- Prevent panic for `from {}` and `std` (@m-span, #4538) **Documentation**: diff --git a/prqlc/prqlc/src/semantic/lowering.rs b/prqlc/prqlc/src/semantic/lowering.rs index 0bb637d1f3ef..2602fdd9612d 100644 --- a/prqlc/prqlc/src/semantic/lowering.rs +++ b/prqlc/prqlc/src/semantic/lowering.rs @@ -227,7 +227,10 @@ impl Lowerer { pl::ExprKind::Ident(fq_table_name) => { // ident that refer to table: create an instance of the table let id = expr.id.unwrap(); - let tid = *self.table_mapping.get(&fq_table_name).unwrap(); + let tid = *self + .table_mapping + .get(&fq_table_name) + .ok_or_else(|| Error::new_bug(4474))?; log::debug!("lowering an instance of table {fq_table_name} (id={id})..."); diff --git a/prqlc/prqlc/src/semantic/resolver/functions.rs b/prqlc/prqlc/src/semantic/resolver/functions.rs index 1eba284f0bab..d2823cf5757c 100644 --- a/prqlc/prqlc/src/semantic/resolver/functions.rs +++ b/prqlc/prqlc/src/semantic/resolver/functions.rs @@ -273,7 +273,10 @@ impl Resolver<'_> { // add relation frame into scope if partial_application_position.is_none() { - let frame = arg.lineage.as_ref().unwrap(); + let frame = arg + .lineage + .as_ref() + .ok_or_else(|| Error::new_bug(4317).with_span(closure.body.span))?; if is_last { self.root_mod.module.insert_frame(frame, NS_THIS); } else { diff --git a/prqlc/prqlc/tests/integration/bad_error_messages.rs b/prqlc/prqlc/tests/integration/bad_error_messages.rs index 1a1345631671..27cf05398593 100644 --- a/prqlc/prqlc/tests/integration/bad_error_messages.rs +++ b/prqlc/prqlc/tests/integration/bad_error_messages.rs @@ -213,3 +213,40 @@ fn a_arrow_b() { Error: internal compiler error; tracked at https://github.com/PRQL/prql/issues/4280 "###); } + +#[test] +fn just_std() { + assert_snapshot!(compile(r###" + std + "###).unwrap_err(), @r###" + Error: + ╭─[:2:5] + │ + 2 │ std + │ ──┬─ + │ ╰─── internal compiler error; tracked at https://github.com/PRQL/prql/issues/4474 + ───╯ + "###); +} + +#[test] +fn empty_tuple_from() { + assert_snapshot!(compile(r###" + from {} + "###).unwrap_err(), @r###" + Error: internal compiler error; tracked at https://github.com/PRQL/prql/issues/4317 + "###); + + assert_snapshot!(compile(r###" + from [] + "###).unwrap_err(), @r###" + Error: internal compiler error; tracked at https://github.com/PRQL/prql/issues/4317 + "###); + + assert_snapshot!(compile(r###" + from {} + select a + "###).unwrap_err(), @r###" + Error: internal compiler error; tracked at https://github.com/PRQL/prql/issues/4317 + "###); +}