// #safe: yes
// #target: macos-x64
module test;
enum Abc : char { ABC }

fn void main()
{
	int a;
	Abc x = (Abc)a;
	long z;
	Abc y = (Abc)z;
	a = 256;
	y = (Abc)a;
	a = -1;
	y = (Abc)a;
}

/* #expect: test.ll

define void @test.main() #0 {
entry:
  %a = alloca i32, align 4
  %x = alloca i8, align 1
  %z = alloca i64, align 8
  %y = alloca i8, align 1
  store i32 0, ptr %a, align 4
  %0 = load i32, ptr %a, align 4
  %lt = icmp slt i32 %0, 0
  %1 = call i1 @llvm.expect.i1(i1 %lt, i1 false)
  br i1 %1, label %panic, label %checkok
checkok:                                          ; preds = %entry
  %ge = icmp sge i32 %0, 1
  %2 = call i1 @llvm.expect.i1(i1 %ge, i1 false)
  br i1 %2, label %panic1, label %checkok6
checkok6:                                         ; preds = %checkok
  %trunc = trunc i32 %0 to i8
  store i8 %trunc, ptr %x, align 1
  store i64 0, ptr %z, align 8
  %3 = load i64, ptr %z, align 8
  %lt7 = icmp slt i64 %3, 0
  %4 = call i1 @llvm.expect.i1(i1 %lt7, i1 false)
  br i1 %4, label %panic8, label %checkok13
checkok13:                                        ; preds = %checkok6
  %ge14 = icmp sge i64 %3, 1
  %5 = call i1 @llvm.expect.i1(i1 %ge14, i1 false)
  br i1 %5, label %panic15, label %checkok20
checkok20:                                        ; preds = %checkok13
  %trunc21 = trunc i64 %3 to i8
  store i8 %trunc21, ptr %y, align 1
  store i32 256, ptr %a, align 4
  %6 = load i32, ptr %a, align 4
  %lt22 = icmp slt i32 %6, 0
  %7 = call i1 @llvm.expect.i1(i1 %lt22, i1 false)
  br i1 %7, label %panic23, label %checkok28
checkok28:                                        ; preds = %checkok20
  %ge29 = icmp sge i32 %6, 1
  %8 = call i1 @llvm.expect.i1(i1 %ge29, i1 false)
  br i1 %8, label %panic30, label %checkok35
checkok35:                                        ; preds = %checkok28
  %trunc36 = trunc i32 %6 to i8
  store i8 %trunc36, ptr %y, align 1
  store i32 -1, ptr %a, align 4
  %9 = load i32, ptr %a, align 4
  %lt37 = icmp slt i32 %9, 0
  %10 = call i1 @llvm.expect.i1(i1 %lt37, i1 false)
  br i1 %10, label %panic38, label %checkok43
checkok43:                                        ; preds = %checkok35
  %ge44 = icmp sge i32 %9, 1
  %11 = call i1 @llvm.expect.i1(i1 %ge44, i1 false)
  br i1 %11, label %panic45, label %checkok50
checkok50:                                        ; preds = %checkok43
  %trunc51 = trunc i32 %9 to i8
  store i8 %trunc51, ptr %y, align 1
  ret void
panic:                                            ; preds = %entry
  store i32 %0, ptr %taddr, align 4
  %12 = insertvalue %any undef, ptr %taddr, 0
  %13 = insertvalue %any %12, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %13, ptr %varargslots, align 16
  %14 = insertvalue %"any[]" undef, ptr %varargslots, 0
  %"$$temp" = insertvalue %"any[]" %14, i64 1, 1
  store %"any[]" %"$$temp", ptr %indirectarg, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg
  unreachable
panic1:                                           ; preds = %checkok
  store i32 %0, ptr %taddr2, align 4
  %15 = insertvalue %any undef, ptr %taddr2, 0
  %16 = insertvalue %any %15, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %16, ptr %varargslots3, align 16
  %17 = insertvalue %"any[]" undef, ptr %varargslots3, 0
  %"$$temp4" = insertvalue %"any[]" %17, i64 1, 1
  store %"any[]" %"$$temp4", ptr %indirectarg5, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg.1, i64 87, ptr @.file, i64 19, ptr @.func, i64 4, i32 7, ptr byval(%"any[]") align 8 %indirectarg5)
  unreachable
panic8:                                           ; preds = %checkok6
  store i64 %3, ptr %taddr9, align 8
  %18 = insertvalue %any undef, ptr %taddr9, 0
  %19 = insertvalue %any %18, i64 ptrtoint (ptr @"$ct.long" to i64), 1
  store %any %19, ptr %varargslots10, align 16
  %20 = insertvalue %"any[]" undef, ptr %varargslots10, 0
  %"$$temp11" = insertvalue %"any[]" %20, i64 1, 1
  store %"any[]" %"$$temp11", ptr %indirectarg12, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg,
  unreachable
panic15:                                          ; preds = %checkok13
  store i64 %3, ptr %taddr16, align 8
  %21 = insertvalue %any undef, ptr %taddr16, 0
  %22 = insertvalue %any %21, i64 ptrtoint (ptr @"$ct.long" to i64), 1
  store %any %22, ptr %varargslots17, align 16
  %23 = insertvalue %"any[]" undef, ptr %varargslots17, 0
  %"$$temp18" = insertvalue %"any[]" %23, i64 1, 1
  store %"any[]" %"$$temp18", ptr %indirectarg19, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg.1, i64 87, ptr @.file, i64 19, ptr @.func, i64 4, i32 9, ptr byval(%"any[]") align 8 %indirectarg19)
  unreachable
panic23:                                          ; preds = %checkok20
  store i32 %6, ptr %taddr24, align 4
  %24 = insertvalue %any undef, ptr %taddr24, 0
  %25 = insertvalue %any %24, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %25, ptr %varargslots25, align 16
  %26 = insertvalue %"any[]" undef, ptr %varargslots25, 0
  %"$$temp26" = insertvalue %"any[]" %26, i64 1, 1
  store %"any[]" %"$$temp26", ptr %indirectarg27, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg,
  unreachable
panic30:                                          ; preds = %checkok28
  store i32 %6, ptr %taddr31, align 4
  %27 = insertvalue %any undef, ptr %taddr31, 0
  %28 = insertvalue %any %27, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %28, ptr %varargslots32, align 16
  %29 = insertvalue %"any[]" undef, ptr %varargslots32, 0
  %"$$temp33" = insertvalue %"any[]" %29, i64 1, 1
  store %"any[]" %"$$temp33", ptr %indirectarg34, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg.1, i64 87, ptr @.file, i64 19, ptr @.func, i64 4, i32 11, ptr byval(%"any[]") align 8 %indirectarg34)
  unreachable
panic38:                                          ; preds = %checkok35
  store i32 %9, ptr %taddr39, align 4
  %30 = insertvalue %any undef, ptr %taddr39, 0
  %31 = insertvalue %any %30, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %31, ptr %varargslots40, align 16
  %32 = insertvalue %"any[]" undef, ptr %varargslots40, 0
  %"$$temp41" = insertvalue %"any[]" %32, i64 1, 1
  store %"any[]" %"$$temp41", ptr %indirectarg42, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg,
  unreachable
panic45:                                          ; preds = %checkok43
  store i32 %9, ptr %taddr46, align 4
  %33 = insertvalue %any undef, ptr %taddr46, 0
  %34 = insertvalue %any %33, i64 ptrtoint (ptr @"$ct.int" to i64), 1
  store %any %34, ptr %varargslots47, align 16
  %35 = insertvalue %"any[]" undef, ptr %varargslots47, 0
  %"$$temp48" = insertvalue %"any[]" %35, i64 1, 1
  store %"any[]" %"$$temp48", ptr %indirectarg49, align 8
  call void @std.core.builtin.panicf(ptr @.panic_msg.1, i64 87, ptr @.file, i64 19, ptr @.func, i64 4, i32 13, ptr byval(%"any[]") align 8 %indirectarg49)
  unreachable
}
