SKIP: FAILED

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

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

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

buf0 = struct @align(4) {
  x_GLF_uniform_float_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_6:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %A:ptr<function, array<i32, 2>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %v1:ptr<function, vec2<f32>, read_write> = var
    %v2:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %12:i32 = load %11
    %x_46:i32 = let %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %15:i32 = load %14
    %x_48:i32 = let %15
    %17:ptr<function, i32, read_write> = access %A, %x_46
    store %17, %x_48
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %19:i32 = load %18
    %x_51:i32 = let %19
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %22:i32 = load %21
    %x_53:i32 = let %22
    %24:ptr<function, i32, read_write> = access %A, %x_51
    store %24, %x_53
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %26:i32 = load %25
    %x_56:i32 = let %26
    store %i, %x_56
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %28:i32 = load %i
        %x_61:i32 = let %28
        %30:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %31:i32 = load %30
        %x_63:i32 = let %31
        %33:bool = gt %x_61, %x_63
        if %33 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %34:i32 = load %i
        %x_66:i32 = let %34
        %36:i32 = sub %x_66, 1i
        store %i, %36
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %37:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %38:f32 = load %37
    %x_69:f32 = let %38
    %40:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %41:f32 = load %40
    %x_71:f32 = let %41
    %43:i32 = load %i
    %x_73:i32 = let %43
    %45:bool = gte %x_69, %x_71
    %46:i32 = select %x_73, 1i, %45
    %47:ptr<function, i32, read_write> = access %A, %46
    %48:i32 = load %47
    %x_76:i32 = let %48
    store %a, %x_76
    %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %51:i32 = load %50
    %x_78:i32 = let %51
    %53:i32 = load %a
    %x_80:i32 = let %53
    %55:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %56:i32 = load %55
    %x_84:i32 = let %56
    %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %59:i32 = load %58
    %x_87:i32 = let %59
    %61:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %62:f32 = load %61
    %x_91:f32 = let %62
    %64:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %65:f32 = load %64
    %x_93:f32 = let %65
    %67:f32 = convert %x_78
    %68:f32 = let %67
    %69:f32 = convert %x_80
    %70:vec2<f32> = construct %68, %69
    %71:vec2<f32> = let %70
    %72:f32 = convert %x_84
    %73:f32 = let %72
    %74:f32 = convert %x_87
    %75:vec2<f32> = construct %73, %74
    %76:vec2<f32> = let %75
    %77:bool = lt %x_91, %x_93
    %78:vec2<bool> = construct %77, true
    %79:vec2<f32> = select %71, %76, %78
    store %v1, %79
    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %81:i32 = load %80
    %x_98:i32 = let %81
    %83:f32 = load_vector_element %v1, %x_98
    %x_100:f32 = let %83
    %85:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %86:i32 = load %85
    %x_103:i32 = let %86
    %88:f32 = load_vector_element %v1, %x_103
    %x_105:f32 = let %88
    %90:vec2<f32> = construct %x_100, %x_100
    %91:vec2<f32> = let %90
    %92:vec2<f32> = construct %x_105, %x_105
    %93:vec2<f32> = select %91, %92, vec2<bool>(false)
    store %v2, %93
    %94:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %95:i32 = load %94
    %x_109:i32 = let %95
    %97:f32 = convert %x_109
    %x_110:f32 = let %97
    %99:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %100:i32 = load %99
    %x_113:i32 = let %100
    %102:f32 = convert %x_113
    %x_114:f32 = let %102
    %104:vec2<f32> = load %v2
    %x_116:vec2<f32> = let %104
    %106:vec2<f32> = construct %x_110, %x_110
    %107:vec2<f32> = let %106
    %108:vec2<f32> = construct %x_114, %x_114
    %109:vec2<f32> = clamp %107, %108, %x_116
    %110:f32 = access %109, 0u
    %111:i32 = call %tint_f32_to_i32, %110
    %113:ptr<function, i32, read_write> = access %A, %111
    %114:i32 = load %113
    %x_121:i32 = let %114
    store %b, %x_121
    %116:i32 = load %b
    %x_122:i32 = let %116
    %118:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %119:i32 = load %118
    %x_124:i32 = let %119
    %121:bool = eq %x_122, %x_124
    if %121 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %122:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %123:i32 = load %122
        %x_130:i32 = let %123
        %125:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %126:i32 = load %125
        %x_133:i32 = let %126
        %128:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %129:i32 = load %128
        %x_136:i32 = let %129
        %131:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %132:i32 = load %131
        %x_139:i32 = let %132
        %134:f32 = convert %x_130
        %135:f32 = let %134
        %136:f32 = convert %x_133
        %137:f32 = let %136
        %138:f32 = convert %x_136
        %139:f32 = let %138
        %140:f32 = convert %x_139
        %141:vec4<f32> = construct %135, %137, %139, %140
        store %x_GLF_color, %141
        exit_if  # if_2
      }
      $B8: {  # false
        %142:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %143:i32 = load %142
        %x_143:i32 = let %143
        %145:f32 = convert %x_143
        %x_144:f32 = let %145
        %147:vec4<f32> = construct %x_144, %x_144, %x_144, %x_144
        store %x_GLF_color, %147
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %149:void = call %main_1
    %150:vec4<f32> = load %x_GLF_color
    %151:main_out = construct %150
    ret %151
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %153:i32 = convert %value
    %154:bool = gte %value, -2147483648.0f
    %155:i32 = select -2147483648i, %153, %154
    %156:bool = lte %value, 2147483520.0f
    %157:i32 = select 2147483647i, %155, %156
    ret %157
  }
}

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