SKIP: FAILED

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

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

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

buf0 = 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
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
}

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec2<i32>, read_write> = var
    %7:f32 = load_vector_element %gl_FragCoord, 1u
    %8:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %9:f32 = load %8
    %10:bool = lt %7, %9
    if %10 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %11:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %12:i32 = load %11
        %13:f32 = convert %12
        %14:vec4<f32> = construct %13
        store %x_GLF_color, %14
        exit_if  # if_1
      }
      $B4: {  # false
        %15:vec4<f32> = load %gl_FragCoord
        %16:vec2<f32> = swizzle %15, xy
        %17:vec2<f32> = let %16
        %18:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %19:f32 = load %18
        %20:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
        %21:f32 = load %20
        %22:vec2<f32> = construct %19, %21
        %23:vec2<f32> = sub %17, %22
        %24:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
        %25:f32 = load %24
        %26:vec2<f32> = mul %23, %25
        %27:vec2<i32> = call %tint_v2f32_to_v2i32, %26
        store %v, %27
        %29:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %30:f32 = load %29
        %31:f32 = let %30
        %32:i32 = load_vector_element %v, 1u
        %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %34:i32 = load %33
        %35:i32 = sub %32, %34
        %36:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %37:i32 = load %36
        %38:i32 = and %35, %37
        %39:f32 = convert %38
        %40:f32 = let %39
        %41:i32 = load_vector_element %v, 0u
        %42:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %43:i32 = load %42
        %44:i32 = and %41, %43
        %45:f32 = convert %44
        %46:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
        %47:f32 = load %46
        %48:vec4<f32> = construct %31, %40, %45, %47
        store %x_GLF_color, %48
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B5: {
    store %gl_FragCoord, %gl_FragCoord_param
    %51:void = call %main_1
    %52:vec4<f32> = load %x_GLF_color
    %53:main_out = construct %52
    ret %53
  }
}
%tint_v2f32_to_v2i32 = func(%value:vec2<f32>):vec2<i32> {
  $B6: {
    %55:vec2<i32> = convert %value
    %56:vec2<bool> = gte %value, vec2<f32>(-2147483648.0f)
    %57:vec2<i32> = select vec2<i32>(-2147483648i), %55, %56
    %58:vec2<bool> = lte %value, vec2<f32>(2147483520.0f)
    %59:vec2<i32> = select vec2<i32>(2147483647i), %57, %58
    ret %59
  }
}

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