mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 06:44:46 +00:00
fix how free is called
somehow the previous version compiles passes llvm verification, but hangs when free is actually called
This commit is contained in:
parent
1b42831973
commit
1279999c6c
3 changed files with 10 additions and 35 deletions
|
@ -331,7 +331,6 @@ pub fn build_dec_list<'a, 'ctx, 'env>(
|
||||||
let call = env
|
let call = env
|
||||||
.builder
|
.builder
|
||||||
.build_call(function, &[original_wrapper.into()], "decrement_union");
|
.build_call(function, &[original_wrapper.into()], "decrement_union");
|
||||||
|
|
||||||
call.set_call_convention(FAST_CALL_CONV);
|
call.set_call_convention(FAST_CALL_CONV);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -414,8 +413,7 @@ fn build_dec_list_help<'a, 'ctx, 'env>(
|
||||||
{
|
{
|
||||||
builder.position_at_end(then_block);
|
builder.position_at_end(then_block);
|
||||||
if !env.leak {
|
if !env.leak {
|
||||||
let free = builder.build_free(refcount_ptr);
|
builder.build_free(refcount_ptr);
|
||||||
builder.insert_instruction(&free, None);
|
|
||||||
}
|
}
|
||||||
builder.build_unconditional_branch(cont_block);
|
builder.build_unconditional_branch(cont_block);
|
||||||
}
|
}
|
||||||
|
|
|
@ -592,6 +592,15 @@ mod gen_list {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn list_concat_two_bigger_non_empty_lists() {
|
||||||
|
assert_evals_to!(
|
||||||
|
"List.concat [ 1.1, 2.2 ] [ 3.3, 4.4, 5.5 ]",
|
||||||
|
&[1.1, 2.2, 3.3, 4.4, 5.5],
|
||||||
|
&'static [f64]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
fn assert_concat_worked(num_elems1: i64, num_elems2: i64) {
|
fn assert_concat_worked(num_elems1: i64, num_elems2: i64) {
|
||||||
let vec1: Vec<i64> = (0..num_elems1)
|
let vec1: Vec<i64> = (0..num_elems1)
|
||||||
.map(|i| 12345 % (i + num_elems1 + num_elems2 + 1))
|
.map(|i| 12345 % (i + num_elems1 + num_elems2 + 1))
|
||||||
|
|
|
@ -1920,36 +1920,4 @@ mod test_mono {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
|
||||||
fn linked_list_map() {
|
|
||||||
compiles_to_ir(
|
|
||||||
indoc!(
|
|
||||||
r#"
|
|
||||||
LinkedList a : [ Nil, Cons a (LinkedList a) ]
|
|
||||||
|
|
||||||
three : LinkedList Int
|
|
||||||
three = Cons 3 (Cons 2 (Cons 1 Nil))
|
|
||||||
|
|
||||||
sum : LinkedList a -> Int
|
|
||||||
sum = \list ->
|
|
||||||
when list is
|
|
||||||
Nil -> 0
|
|
||||||
Cons x rest -> x + sum rest
|
|
||||||
|
|
||||||
map : (a -> b), LinkedList a -> LinkedList b
|
|
||||||
map = \f, list ->
|
|
||||||
when list is
|
|
||||||
Nil -> Nil
|
|
||||||
Cons x rest -> Cons (f x) (map f rest)
|
|
||||||
|
|
||||||
sum (map (\_ -> 1) three)
|
|
||||||
"#
|
|
||||||
),
|
|
||||||
indoc!(
|
|
||||||
r#"
|
|
||||||
"#
|
|
||||||
),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue