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

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec4<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %7:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %8:i32 = load %7
    %x_40:i32 = let %8
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %11:i32 = load %10
    %x_43:i32 = let %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %14:i32 = load %13
    %x_46:i32 = let %14
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %17:i32 = load %16
    %x_49:i32 = let %17
    %19:f32 = convert %x_40
    %20:f32 = let %19
    %21:f32 = convert %x_43
    %22:f32 = let %21
    %23:f32 = convert %x_46
    %24:f32 = let %23
    %25:f32 = convert %x_49
    %26:vec4<f32> = construct %20, %22, %24, %25
    store %v, %26
    %27:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %28:i32 = load %27
    %x_53:i32 = let %28
    store %i, %x_53
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %30:i32 = load %i
        %x_58:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %33:i32 = load %32
        %x_60:i32 = let %33
        %35:bool = lt %x_58, %x_60
        if %35 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %36:vec4<f32> = load %v
        %x_63:vec4<f32> = let %36
        %38:vec4<f32> = load %v
        %x_64:vec4<f32> = let %38
        %40:vec4<f32> = load %v
        %x_65:vec4<f32> = let %40
        %42:vec4<f32> = load %v
        %x_66:vec4<f32> = let %42
        %44:i32 = load %i
        %x_88:i32 = let %44
        %46:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
        %47:f32 = load %46
        %x_92:f32 = let %47
        %49:f32 = access %x_63, 0u
        %50:f32 = access %x_63, 1u
        %51:f32 = access %x_63, 2u
        %52:f32 = access %x_63, 3u
        %53:vec4<f32> = construct %49, %50, %51, %52
        %54:vec4<f32> = let %53
        %55:f32 = access %x_64, 0u
        %56:f32 = access %x_64, 1u
        %57:f32 = access %x_64, 2u
        %58:f32 = access %x_64, 3u
        %59:vec4<f32> = construct %55, %56, %57, %58
        %60:vec4<f32> = let %59
        %61:f32 = access %x_65, 0u
        %62:f32 = access %x_65, 1u
        %63:f32 = access %x_65, 2u
        %64:f32 = access %x_65, 3u
        %65:vec4<f32> = construct %61, %62, %63, %64
        %66:vec4<f32> = let %65
        %67:f32 = access %x_66, 0u
        %68:f32 = access %x_66, 1u
        %69:f32 = access %x_66, 2u
        %70:f32 = access %x_66, 3u
        %71:vec4<f32> = construct %67, %68, %69, %70
        %72:mat4x4<f32> = construct %54, %60, %66, %71
        %73:f32 = access %72, 0u, %x_88
        %74:bool = gt %73, %x_92
        if %74 [t: $B7] {  # if_2
          $B7: {  # true
            %75:i32 = load %i
            %x_96:i32 = let %75
            %77:vec4<f32> = load %v
            %x_97:vec4<f32> = let %77
            %79:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
            %80:f32 = load %79
            %x_99:f32 = let %80
            %82:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
            %83:f32 = load %82
            %x_102:f32 = let %83
            %85:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %86:i32 = load %85
            %x_106:i32 = let %86
            %88:vec4<f32> = construct %x_99, %x_99, %x_99, %x_99
            %89:vec4<f32> = let %88
            %90:vec4<f32> = construct %x_102, %x_102, %x_102, %x_102
            %91:vec4<f32> = clamp %x_97, %89, %90
            %92:f32 = access %91, %x_106
            store_vector_element %v, %x_96, %92
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %93:i32 = load %i
        %x_109:i32 = let %93
        %95:i32 = add %x_109, 1i
        store %i, %95
        next_iteration  # -> $B3
      }
    }
    %96:vec4<f32> = load %v
    %x_111:vec4<f32> = let %96
    %98:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %99:i32 = load %98
    %x_113:i32 = let %99
    %101:f32 = convert %x_113
    %x_114:f32 = let %101
    %103:vec4<f32> = construct %x_114, %x_114, %x_114, %x_114
    %104:vec4<bool> = eq %x_111, %103
    %105:bool = all %104
    if %105 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %106:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %107:i32 = load %106
        %x_122:i32 = let %107
        %109:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %110:i32 = load %109
        %x_125:i32 = let %110
        %112:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %113:i32 = load %112
        %x_128:i32 = let %113
        %115:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %116:i32 = load %115
        %x_131:i32 = let %116
        %118:f32 = convert %x_122
        %119:f32 = let %118
        %120:f32 = convert %x_125
        %121:f32 = let %120
        %122:f32 = convert %x_128
        %123:f32 = let %122
        %124:f32 = convert %x_131
        %125:vec4<f32> = construct %119, %121, %123, %124
        store %x_GLF_color, %125
        exit_if  # if_3
      }
      $B9: {  # false
        %126:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
        %127:i32 = load %126
        %x_135:i32 = let %127
        %129:f32 = convert %x_135
        %x_136:f32 = let %129
        %131:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
        store %x_GLF_color, %131
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %133:void = call %main_1
    %134:vec4<f32> = load %x_GLF_color
    %135:main_out = construct %134
    ret %135
  }
}

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