fix(tvix/eval): type check function argument with set pattern

C++ Nix forces and typechecks the passed argument even if it is not
necessary in order to compute the return value of the function. I
discovered this when I thought our formals miscompilation might be that
we are too strict, but doesn't look like it in this case.

Change-Id: Ifb3c92592293052c489d1e3ae8c7c54e4b6b4dc6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/8701
Tested-by: BuildkiteCI
Autosubmit: sterni <sternenseemann@systemli.org>
Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
sterni 2023-06-02 22:38:00 +02:00 committed by clbot
parent 617130b088
commit 10c6cb7251
5 changed files with 18 additions and 0 deletions

View file

@ -910,6 +910,7 @@ impl Compiler<'_> {
// the stack.
self.scope_mut().mark_initialised(set_idx);
self.emit_force(pattern);
self.push_op(OpCode::OpAssertAttrs, pattern);
let ellipsis = pattern.ellipsis_token().is_some();
if !ellipsis {