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, 5> @offset(0)
}

buf2 = struct @align(8) {
  zeroVec:vec2<f32> @offset(0)
}

buf3 = struct @align(8) {
  oneVec:vec2<f32> @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)
}

S = struct @align(4) {
  numbers:array<f32, 3> @offset(0)
}

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

$B1: {  # root
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_12:ptr<uniform, buf3, read> = var @binding_point(0, 3)
  %x_15:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %obj:ptr<function, S, read_write> = var
    %a:ptr<function, f32, read_write> = var
    %x_49:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %11:ptr<uniform, f32, read> = access %x_7, 0u, 3i, 0u
    %12:f32 = load %11
    %13:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %14:f32 = load %13
    %15:ptr<uniform, f32, read> = access %x_7, 0u, 4i, 0u
    %16:f32 = load %15
    %17:array<f32, 3> = construct %12, %14, %16
    %18:S = construct %17
    store %obj, %18
    %19:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %20:f32 = load_vector_element %19, 0u
    %x_59:f32 = let %20
    %22:i32 = call %tint_f32_to_i32, %x_59
    %24:ptr<function, f32, read_write> = access %obj, 0u, %22
    %25:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %26:f32 = load %25
    store %24, %26
    %27:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
    %28:f32 = load_vector_element %27, 0u
    %29:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %30:f32 = load %29
    %31:bool = gt %28, %30
    if %31 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %32:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %33:vec2<f32> = load %32
        store %x_49, %33
        exit_if  # if_1
      }
      $B4: {  # false
        %34:ptr<uniform, vec2<f32>, read> = access %x_12, 0u
        %35:vec2<f32> = load %34
        store %x_49, %35
        exit_if  # if_1
      }
    }
    %36:f32 = load_vector_element %x_49, 1u
    store %a, %36
    %37:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %38:f32 = load %37
    %39:f32 = load %a
    %40:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
    %41:i32 = load %40
    %42:ptr<function, f32, read_write> = access %obj, 0u, %41
    %43:f32 = load %42
    %44:f32 = mix %38, %39, %43
    store %b, %44
    %45:f32 = load %b
    %46:ptr<uniform, f32, read> = access %x_7, 0u, 2i, 0u
    %47:f32 = load %46
    %48:f32 = distance %45, %47
    %49:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %50:f32 = load %49
    %51:bool = lt %48, %50
    if %51 [t: $B5, f: $B6] {  # if_2
      $B5: {  # true
        %52:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:f32 = let %54
        %56:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %57:i32 = load %56
        %58:f32 = convert %57
        %59:f32 = let %58
        %60:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %61:i32 = load %60
        %62:f32 = convert %61
        %63:f32 = let %62
        %64:ptr<uniform, i32, read> = access %x_15, 0u, 0i, 0u
        %65:i32 = load %64
        %66:f32 = convert %65
        %67:vec4<f32> = construct %55, %59, %63, %66
        store %x_GLF_color, %67
        exit_if  # if_2
      }
      $B6: {  # false
        %68:ptr<uniform, i32, read> = access %x_15, 0u, 1i, 0u
        %69:i32 = load %68
        %70:f32 = convert %69
        %71:vec4<f32> = construct %70
        store %x_GLF_color, %71
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %73:void = call %main_1
    %74:vec4<f32> = load %x_GLF_color
    %75:main_out = construct %74
    ret %75
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B8: {
    %77:i32 = convert %value
    %78:bool = gte %value, -2147483648.0f
    %79:i32 = select -2147483648i, %77, %78
    %80:bool = lte %value, 2147483520.0f
    %81:i32 = select 2147483647i, %79, %80
    ret %81
  }
}

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