SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

S = struct @align(16) {
  f0:i32 @offset(0)
  f1:vec3<bool> @offset(16)
}

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

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

%main_1 = func():void {
  $B2: {
    %ll:ptr<function, S, read_write> = var
    %sums:ptr<function, array<f32, 9>, read_write> = var
    store %ll, S(0i, vec3<bool>(true))
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:S = load %ll
        %x_12:S = let %6
        %8:ptr<uniform, vec2<f32>, read> = access %x_7, 0u
        %9:f32 = load_vector_element %8, 1u
        %x_45:f32 = let %9
        %11:i32 = access %x_12, 0u
        %12:i32 = call %tint_f32_to_i32, %x_45
        %14:bool = neq %11, %12
        if %14 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %15:ptr<function, f32, read_write> = access %sums, 0i
        store %15, 0.0f
        continue  # -> $B4
      }
      $B4: {  # continuing
        %16:S = load %ll
        %x_13:S = let %16
        %18:S = load %ll
        %x_50:S = let %18
        %x_51_1:ptr<function, S, read_write> = var, %x_50
        %21:ptr<function, i32, read_write> = access %x_51_1, 0u
        %22:i32 = access %x_13, 0u
        %23:i32 = add %22, 1i
        store %21, %23
        %24:S = load %x_51_1
        %x_51:S = let %24
        store %ll, %x_51
        next_iteration  # -> $B3
      }
    }
    %26:ptr<function, f32, read_write> = access %sums, 0i
    %27:f32 = load %26
    %x_53:f32 = let %27
    %29:vec2<f32> = construct %x_53, %x_53
    %x_54:vec2<f32> = let %29
    %31:f32 = access %x_54, 0u
    %32:f32 = access %x_54, 1u
    %33:vec4<f32> = construct 1.0f, %31, %32, 1.0f
    store %x_GLF_color, %33
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %35:void = call %main_1
    %36:vec4<f32> = load %x_GLF_color
    %37:main_out = construct %36
    ret %37
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B8: {
    %39:i32 = convert %value
    %40:bool = gte %value, -2147483648.0f
    %41:i32 = select -2147483648i, %39, %40
    %42:bool = lte %value, 2147483520.0f
    %43:i32 = select 2147483647i, %41, %42
    ret %43
  }
}

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.  *
********************************************************************
