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, 2> @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
    %7:f32 = sqrt %6
    %8:bool = lt %7, -1.0f
    if %8 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %9:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %10:i32 = load %9
        %11:f32 = convert %10
        %12:vec4<f32> = construct %11
        store %x_GLF_color, %12
        exit_if  # if_1
      }
      $B4: {  # false
        %13:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %14:i32 = load %13
        %15:f32 = convert %14
        %x_41:f32 = let %15
        %17:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %18:i32 = load %17
        %19:f32 = convert %18
        %x_43:f32 = let %19
        %21:vec4<f32> = construct %x_41, %x_43, %x_43, %x_41
        store %x_GLF_color, %21
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %23:void = call %main_1
    %24:vec4<f32> = load %x_GLF_color
    %25:main_out = construct %24
    ret %25
  }
}

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