mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Codegen error in if (try x = (false ? io::EOF? : 1)), i.e. using if-try with a CT known value.
This commit is contained in:
@@ -10,6 +10,7 @@
|
||||
- List.remove_at would incorrectly trigger ASAN.
|
||||
- With avx512, passing a 512 bit vector in a union would be lowered incorrectly, causing an assert. #2362
|
||||
- Codegen error in `if (try x = (true ? io::EOF? : 1))`, i.e. using if-try with a known Empty.
|
||||
- Codegen error in `if (try x = (false ? io::EOF? : 1))`, i.e. using if-try with a CT known value.
|
||||
|
||||
### Stdlib changes
|
||||
- Add `==` to `Pair`, `Triple` and TzDateTime. Add print to `Pair` and `Triple`.
|
||||
|
||||
@@ -4284,9 +4284,16 @@ void llvm_emit_try_assign_try_catch(GenContext *c, bool is_try, BEValue *be_valu
|
||||
return;
|
||||
}
|
||||
|
||||
if (llvm_basic_block_is_unused(catch_block))
|
||||
{
|
||||
llvm_value_set(be_value, LLVMConstInt(c->bool_type, is_try ? 1 : 0, false), type_bool);
|
||||
return;
|
||||
}
|
||||
|
||||
// 10. Jump to the phi
|
||||
llvm_emit_br(c, phi_catch);
|
||||
|
||||
|
||||
// 11. Emit the catch and jump.
|
||||
llvm_emit_block(c, catch_block);
|
||||
llvm_emit_br(c, phi_catch);
|
||||
|
||||
@@ -3,18 +3,17 @@ module test;
|
||||
import std;
|
||||
fn int main()
|
||||
{
|
||||
if (try x = (true ? io::EOF? : 3))
|
||||
if (try x = (false ? io::EOF? : 3))
|
||||
{}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* #expect: test.ll
|
||||
|
||||
define i32 @main() #0 {
|
||||
entry:
|
||||
%x = alloca i32, align 4
|
||||
store i32 0, ptr %x, align 4
|
||||
br label %catch_landing
|
||||
|
||||
catch_landing: ; preds = %entry
|
||||
store i32 3, ptr %x, align 4
|
||||
ret i32 0
|
||||
}
|
||||
Reference in New Issue
Block a user