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<function, i32, read_write> = access %A, %x_46
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %16:i32 = load %15
    store %14, %16
    %17:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %18:i32 = load %17
    %x_51:i32 = let %18
    %20:ptr<function, i32, read_write> = access %A, %x_51
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %22:i32 = load %21
    store %20, %22
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %24:i32 = load %23
    store %i, %24
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %25:i32 = load %i
        %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %27:i32 = load %26
        %28:bool = gt %25, %27
        if %28 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %29:i32 = load %i
        %30:i32 = sub %29, 1i
        store %i, %30
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    %31:i32 = load %i
    %32:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %33:f32 = load %32
    %34:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %35:f32 = load %34
    %36:bool = gte %33, %35
    %37:i32 = select %31, 1i, %36
    %38:ptr<function, i32, read_write> = access %A, %37
    %39:i32 = load %38
    store %a, %39
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %41:i32 = load %40
    %42:f32 = convert %41
    %43:f32 = let %42
    %44:i32 = load %a
    %45:f32 = convert %44
    %46:vec2<f32> = construct %43, %45
    %47:vec2<f32> = let %46
    %48:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %49:i32 = load %48
    %50:f32 = convert %49
    %51:f32 = let %50
    %52:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %53:i32 = load %52
    %54:f32 = convert %53
    %55:vec2<f32> = construct %51, %54
    %56:vec2<f32> = let %55
    %57:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %58:f32 = load %57
    %59:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %60:f32 = load %59
    %61:bool = lt %58, %60
    %62:vec2<bool> = construct %61, true
    %63:vec2<f32> = select %47, %56, %62
    store %v1, %63
    %64:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %65:i32 = load %64
    %66:f32 = load_vector_element %v1, %65
    %67:vec2<f32> = construct %66
    %68:vec2<f32> = let %67
    %69:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %70:i32 = load %69
    %71:f32 = load_vector_element %v1, %70
    %72:vec2<f32> = construct %71
    %73:vec2<f32> = select %68, %72, vec2<bool>(false)
    store %v2, %73
    %74:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %75:i32 = load %74
    %76:f32 = convert %75
    %77:vec2<f32> = construct %76
    %78:vec2<f32> = let %77
    %79:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %80:i32 = load %79
    %81:f32 = convert %80
    %82:vec2<f32> = construct %81
    %83:vec2<f32> = load %v2
    %84:vec2<f32> = clamp %78, %82, %83
    %85:f32 = access %84, 0u
    %86:i32 = call %tint_f32_to_i32, %85
    %88:ptr<function, i32, read_write> = access %A, %86
    %89:i32 = load %88
    store %b, %89
    %90:i32 = load %b
    %91:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %92:i32 = load %91
    %93:bool = eq %90, %92
    if %93 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %94:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %95:i32 = load %94
        %96:f32 = convert %95
        %97:f32 = let %96
        %98:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %99:i32 = load %98
        %100:f32 = convert %99
        %101:f32 = let %100
        %102:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %103:i32 = load %102
        %104:f32 = convert %103
        %105:f32 = let %104
        %106:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %107:i32 = load %106
        %108:f32 = convert %107
        %109:vec4<f32> = construct %97, %101, %105, %108
        store %x_GLF_color, %109
        exit_if  # if_2
      }
      $B8: {  # false
        %110:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %111:i32 = load %110
        %112:f32 = convert %111
        %113:vec4<f32> = construct %112
        store %x_GLF_color, %113
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %115:void = call %main_1
    %116:vec4<f32> = load %x_GLF_color
    %117:main_out = construct %116
    ret %117
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B10: {
    %119:i32 = convert %value
    %120:bool = gte %value, -2147483648.0f
    %121:i32 = select -2147483648i, %119, %120
    %122:bool = lte %value, 2147483520.0f
    %123:i32 = select 2147483647i, %121, %122
    ret %123
  }
}

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