diff --git a/compiler/gen/src/llvm/build.rs b/compiler/gen/src/llvm/build.rs index d1bd40ee29..17e78d476f 100644 --- a/compiler/gen/src/llvm/build.rs +++ b/compiler/gen/src/llvm/build.rs @@ -2731,7 +2731,16 @@ fn run_low_level<'a, 'ctx, 'env>( let inplace = get_inplace_from_layout(layout); - list_keep_if(env, inplace, parent, func, func_layout, list, list_layout) + list_keep_if( + env, + layout_ids, + inplace, + parent, + func, + func_layout, + list, + list_layout, + ) } ListContains => { // List.contains : List elem, elem -> Bool diff --git a/compiler/gen/src/llvm/build_list.rs b/compiler/gen/src/llvm/build_list.rs index 0e18c79b4d..e23bf1c1b6 100644 --- a/compiler/gen/src/llvm/build_list.rs +++ b/compiler/gen/src/llvm/build_list.rs @@ -1113,6 +1113,7 @@ pub fn list_contains_help<'a, 'ctx, 'env>( /// List.keepIf : List elem, (elem -> Bool) -> List elem pub fn list_keep_if<'a, 'ctx, 'env>( env: &Env<'a, 'ctx, 'env>, + layout_ids: &mut LayoutIds<'a>, output_inplace: InPlace, parent: FunctionValue<'ctx>, func: BasicValueEnum<'ctx>, @@ -1212,6 +1213,9 @@ pub fn list_keep_if<'a, 'ctx, 'env>( builder.position_at_end(cont_block); + // consume the input list + decrement_refcount_layout(env, parent, layout_ids, list, list_layout); + builder.build_load(result, "load_result") } }