
int %foo() {
  ret int 0
}

int %main() {
  ; cast bool to ...
  cast bool true to bool
  cast bool true to int
  cast bool true to long
  cast bool true to ulong
  cast bool true to float
  cast bool true to double

  ; cast sbyte to ...
  cast sbyte 0 to sbyte
  cast sbyte 4 to short
  cast sbyte 4 to long
  cast sbyte 4 to ulong
  cast sbyte 4 to double

  ; cast ubyte to ...
  cast ubyte 0 to float
  cast ubyte 0 to double

  ; cast short to ...
  cast short 0 to short
  cast short 0 to long
  cast short 0 to ulong
  cast short 0 to double

  ; cast ushort to ...
  cast ushort 0 to float
  cast ushort 0 to double

  ; cast int to ...
  cast int 6 to bool
  cast int 6 to short
  cast int 0 to int
  cast int 0 to long
  cast int 0 to ulong
  cast int 0 to float
  cast int 0 to double

  ; cast uint to ...
  cast uint 0 to long
  cast uint 0 to ulong
  cast uint 0 to float
  cast uint 0 to double

  ; cast long to ...
  cast long 0 to sbyte
  cast long 0 to ubyte
  cast long 0 to short
  cast long 0 to ushort
  cast long 0 to int
  cast long 0 to uint
  cast long 0 to long
  cast long 0 to ulong
  cast long 0 to float
  cast long 0 to double
  
  ; cast float to ...
  ;cast float 0.0 to bool
  cast float 0.0 to float
  cast float 0.0 to double

  ; cast double to ...
  ;cast double 0.0 to bool
  cast double 0.0 to sbyte
  cast double 0.0 to ubyte
  cast double 0.0 to short
  cast double 0.0 to ushort
  cast double 0.0 to int
  cast double 0.0 to uint
  cast double 0.0 to long
  ;cast double 0.0 to ulong
  cast double 0.0 to float
  cast double 0.0 to double

  ret int 0
}
