Files
c3c/test/test_suite/errors/or_err_infer.c3t
2025-02-10 16:20:33 +01:00

96 lines
2.6 KiB
Plaintext

// #target: macos-x64
enum Foo
{
ABC,
DEF
}
fn int main()
{
int a;
Foo! x = ABC;
Foo f = x ?? DEF;
return 0;
}
/* expect: test.ll
define void @top_down_casts.test() #0 {
entry:
%x = alloca i32, align 4
%y = alloca i32, align 4
%z = alloca i64, align 8
%w = alloca i32, align 4
%w.f = alloca i64, align 8
store i32 0, ptr %x, align 4
store i32 0, ptr %y, align 4
%0 = load i32, ptr %x, align 4
%sext = sext i32 %0 to i64
%1 = load i32, ptr %y, align 4
%sext1 = sext i32 %1 to i64
%mul = mul i64 %sext, %sext1
store i64 %mul, ptr %z, align 8
%2 = load i32, ptr %x, align 4
%3 = load i32, ptr %y, align 4
%sdiv = sdiv i32 %2, %3
%sext2 = sext i32 %sdiv to i64
store i64 %sext2, ptr %z, align 8
%4 = load i32, ptr %x, align 4
%sext3 = sext i32 %4 to i64
%5 = load i32, ptr %y, align 4
%sext4 = sext i32 %5 to i64
%add = add i64 %sext3, %sext4
store i64 %add, ptr %z, align 8
%6 = load i32, ptr %x, align 4
%sext5 = sext i32 %6 to i64
%7 = load i32, ptr %y, align 4
%sext6 = sext i32 %7 to i64
%sub = sub i64 %sext5, %sext6
store i64 %sub, ptr %z, align 8
%8 = load i32, ptr %x, align 4
%9 = load i32, ptr %y, align 4
%smod = srem i32 %8, %9
%sext7 = sext i32 %smod to i64
store i64 %sext7, ptr %z, align 8
%10 = load i32, ptr %x, align 4
%sext8 = sext i32 %10 to i64
%11 = load i32, ptr %y, align 4
%zext = zext i32 %11 to i64
%shl = shl i64 %sext8, %zext
%12 = freeze i64 %shl
store i64 %12, ptr %z, align 8
%13 = load i32, ptr %x, align 4
%sext9 = sext i32 %13 to i64
%14 = load i32, ptr %y, align 4
%zext10 = zext i32 %14 to i64
%ashr = ashr i64 %sext9, %zext10
%15 = freeze i64 %ashr
store i64 %15, ptr %z, align 8
%16 = load i32, ptr %x, align 4
%bnot = xor i32 %16, -1
%sext11 = sext i32 %bnot to i64
store i64 %sext11, ptr %z, align 8
%17 = load i32, ptr %x, align 4
%neg = sub i32 0, %17
%sext12 = sext i32 %neg to i64
store i64 %sext12, ptr %z, align 8
store i64 0, ptr %w.f, align 8
store i32 0, ptr %w, align 4
%optval = load i64, ptr %w.f, align 8
%not_err = icmp eq i64 %optval, 0
%18 = call i1 @llvm.expect.i1(i1 %not_err, i1 true)
br i1 %18, label %after_check, label %else_block
after_check: ; preds = %entry
%19 = load i32, ptr %w, align 4
%sext13 = sext i32 %19 to i64
br label %phi_block
else_block: ; preds = %entry
br label %phi_block
phi_block: ; preds = %else_block, %after_check
%val = phi i64 [ %sext13, %after_check ], [ 1, %else_block ]
store i64 %val, ptr %z, align 8
ret void
}