mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 20:11:17 +00:00
- Remove `[?]` syntax. - Change `int!` to `int?` syntax. - New `fault` declarations. - Enum associated values can reference the calling enum.
35 lines
842 B
Plaintext
35 lines
842 B
Plaintext
// #target: macos-x64
|
|
|
|
module test;
|
|
|
|
fn void tester()
|
|
{
|
|
bool? x = false;
|
|
x ?? true;
|
|
}
|
|
|
|
/* #expect: test.ll
|
|
|
|
define void @test.tester() #0 {
|
|
entry:
|
|
%x = alloca i8, align 1
|
|
%x.f = alloca i64, align 8
|
|
store i8 0, ptr %x, align 1
|
|
store i64 0, ptr %x.f, align 8
|
|
%optval = load i64, ptr %x.f, align 8
|
|
%not_err = icmp eq i64 %optval, 0
|
|
%0 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
|
|
br i1 %0, label %after_check, label %else_block
|
|
|
|
after_check: ; preds = %entry
|
|
%1 = load i8, ptr %x, align 1
|
|
%2 = trunc i8 %1 to i1
|
|
br label %phi_block
|
|
|
|
else_block: ; preds = %entry
|
|
br label %phi_block
|
|
|
|
phi_block: ; preds = %else_block, %after_check
|
|
%val = phi i1 [ %2, %after_check ], [ true, %else_block ]
|
|
ret void
|
|
} |