diff --git a/native/lgj-abi/src/exports.rs b/native/lgj-abi/src/exports.rs index 15558d5..f02e961 100644 --- a/native/lgj-abi/src/exports.rs +++ b/native/lgj-abi/src/exports.rs @@ -1756,7 +1756,12 @@ fn exec_error_to_status(e: ExecError) -> i32 { | ExecError::BlendNeedsOut | ExecError::TerminalNeedsOut { .. } | ExecError::GateAliasesDst { .. } - | ExecError::RangeOutOfBounds { .. } => LGJ_ERR_ALLOCATION_FAILED, + | ExecError::RangeOutOfBounds { .. } + // Raised only by `execute_extent` over a PARTIAL extent. Every call in + // this file executes the whole population, so reaching either would + // be a bug here, exactly like the arms above. + | ExecError::ExtentOutOfRange { .. } + | ExecError::ExtentUnsupported { .. } => LGJ_ERR_ALLOCATION_FAILED, } } diff --git a/native/lgj-abi/src/exports/tests/group_sum.rs b/native/lgj-abi/src/exports/tests/group_sum.rs index c322b37..51a21a3 100644 --- a/native/lgj-abi/src/exports/tests/group_sum.rs +++ b/native/lgj-abi/src/exports/tests/group_sum.rs @@ -256,7 +256,10 @@ fn the_tiled_executor_and_the_scalar_reference_agree_on_the_lowered_program() { for key in keys { let program = plan_lower::lower_group_sum(&ops, n as u32, key, LANE_VALUES as u16).unwrap(); - let tile = tile_words_for(n as usize); + // An explicit narrow tile, not `tile_words_for`: the default tile + // is a performance setting (256 words since lance-graph #1281) and + // must not decide whether this fixture spans several tiles. + let tile = (n.div_ceil(64) as usize).min(8); let need = scratch_words_for(tile, plan_lower::SLOTS as usize).unwrap(); let mut buf = vec![0u64; need]; let mut scratch = Scratch::over(&mut buf, tile, plan_lower::SLOTS as usize).unwrap();