SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 1> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr_1, 2> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_5:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
}

%main_1 = func():void {
  $B2: {
    %5:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %6:f32 = load %5
    %x_29:f32 = let %6
    %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
    %9:f32 = load %8
    %x_32:f32 = let %9
    %11:f32 = ldexp %x_29, 10000i
    %12:bool = eq %11, %x_32
    if %12 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %13:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %14:i32 = load %13
        %x_38:i32 = let %14
        %16:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %17:i32 = load %16
        %x_41:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %20:i32 = load %19
        %x_44:i32 = let %20
        %22:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %23:i32 = load %22
        %x_47:i32 = let %23
        %25:f32 = convert %x_38
        %26:f32 = let %25
        %27:f32 = convert %x_41
        %28:f32 = let %27
        %29:f32 = convert %x_44
        %30:f32 = let %29
        %31:f32 = convert %x_47
        %32:vec4<f32> = construct %26, %28, %30, %31
        store %x_GLF_color, %32
        exit_if  # if_1
      }
      $B4: {  # false
        %33:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %34:i32 = load %33
        %x_51:i32 = let %34
        %36:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %37:i32 = load %36
        %x_54:i32 = let %37
        %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %40:i32 = load %39
        %x_57:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %43:i32 = load %42
        %x_60:i32 = let %43
        %45:f32 = convert %x_51
        %46:f32 = let %45
        %47:f32 = convert %x_54
        %48:f32 = let %47
        %49:f32 = convert %x_57
        %50:f32 = let %49
        %51:f32 = convert %x_60
        %52:vec4<f32> = construct %46, %48, %50, %51
        store %x_GLF_color, %52
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %54:void = call %main_1
    %55:vec4<f32> = load %x_GLF_color
    %56:main_out = construct %55
    ret %56
  }
}

unhandled variable address space
********************************************************************
*  The tint shader compiler has encountered an unexpected error.   *
*                                                                  *
*  Please help us fix this issue by submitting a bug report at     *
*  crbug.com/tint with the source program that triggered the bug.  *
********************************************************************
