forked from M-Labs/nac3
1
0
Fork 0

core: Fix missing conversion to i1 for IfExp

This commit is contained in:
David Mak 2023-09-28 10:06:40 +08:00
parent acdb1de6fe
commit 176f250bdb
1 changed files with 3 additions and 1 deletions

View File

@ -1281,11 +1281,12 @@ pub fn gen_expr<'ctx, 'a, G: CodeGenerator>(
.unwrap() .unwrap()
.to_basic_value_enum(ctx, generator, values[0].custom.unwrap())? .to_basic_value_enum(ctx, generator, values[0].custom.unwrap())?
.into_int_value(); .into_int_value();
let left = generator.bool_to_i1(ctx, left);
let current = ctx.builder.get_insert_block().unwrap().get_parent().unwrap(); let current = ctx.builder.get_insert_block().unwrap().get_parent().unwrap();
let a_bb = ctx.ctx.append_basic_block(current, "a"); let a_bb = ctx.ctx.append_basic_block(current, "a");
let b_bb = ctx.ctx.append_basic_block(current, "b"); let b_bb = ctx.ctx.append_basic_block(current, "b");
let cont_bb = ctx.ctx.append_basic_block(current, "cont"); let cont_bb = ctx.ctx.append_basic_block(current, "cont");
ctx.builder.build_conditional_branch(generator.bool_to_i1(ctx, left), a_bb, b_bb); ctx.builder.build_conditional_branch(left, a_bb, b_bb);
let (a, b) = match op { let (a, b) = match op {
Boolop::Or => { Boolop::Or => {
ctx.builder.position_at_end(a_bb); ctx.builder.position_at_end(a_bb);
@ -1451,6 +1452,7 @@ pub fn gen_expr<'ctx, 'a, G: CodeGenerator>(
.unwrap() .unwrap()
.to_basic_value_enum(ctx, generator, test.custom.unwrap())? .to_basic_value_enum(ctx, generator, test.custom.unwrap())?
.into_int_value(); .into_int_value();
let test = generator.bool_to_i1(ctx, test);
let body_ty = body.custom.unwrap(); let body_ty = body.custom.unwrap();
let is_none = ctx.unifier.get_representative(body_ty) == ctx.primitives.none; let is_none = ctx.unifier.get_representative(body_ty) == ctx.primitives.none;
let result = if !is_none { let result = if !is_none {