SKIP: FAILED

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

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

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

$B1: {  # root
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %r:ptr<function, array<i32, 15>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %data:ptr<function, array<i32, 15>, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %i_3:ptr<function, i32, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %11:i32 = load %10
    %x_46:i32 = let %11
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %14:i32 = load %13
    %x_48:i32 = let %14
    %16:ptr<function, i32, read_write> = access %r, %x_46
    store %16, %x_48
    %17:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %18:i32 = load %17
    %x_51:i32 = let %18
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %21:i32 = load %20
    %x_53:i32 = let %21
    %23:ptr<function, i32, read_write> = access %r, %x_51
    store %23, %x_53
    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %25:i32 = load %24
    %x_56:i32 = let %25
    %27:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %28:i32 = load %27
    %x_58:i32 = let %28
    %30:ptr<function, i32, read_write> = access %r, %x_56
    store %30, %x_58
    %31:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %32:i32 = load %31
    %x_61:i32 = let %32
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %35:i32 = load %34
    %x_63:i32 = let %35
    %37:ptr<function, i32, read_write> = access %r, %x_61
    store %37, %x_63
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %39:i32 = load %38
    %x_66:i32 = let %39
    %41:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %42:i32 = load %41
    %x_68:i32 = let %42
    %44:ptr<function, i32, read_write> = access %r, %x_66
    store %44, %x_68
    %45:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %46:i32 = load %45
    %x_71:i32 = let %46
    %48:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %49:i32 = load %48
    %x_73:i32 = let %49
    %51:ptr<function, i32, read_write> = access %r, %x_71
    %52:i32 = negation %x_73
    store %51, %52
    %53:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %54:i32 = load %53
    %x_77:i32 = let %54
    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %57:i32 = load %56
    %x_79:i32 = let %57
    %59:ptr<function, i32, read_write> = access %r, %x_77
    %60:i32 = negation %x_79
    store %59, %60
    %61:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
    %62:i32 = load %61
    %x_83:i32 = let %62
    %64:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %65:i32 = load %64
    %x_85:i32 = let %65
    %67:ptr<function, i32, read_write> = access %r, %x_83
    %68:i32 = negation %x_85
    store %67, %68
    %69:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %70:i32 = load %69
    %x_89:i32 = let %70
    %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %73:i32 = load %72
    %x_91:i32 = let %73
    %75:ptr<function, i32, read_write> = access %r, %x_89
    %76:i32 = negation %x_91
    store %75, %76
    %77:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %78:i32 = load %77
    %x_95:i32 = let %78
    %80:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %81:i32 = load %80
    %x_97:i32 = let %81
    %83:ptr<function, i32, read_write> = access %r, %x_95
    %84:i32 = negation %x_97
    store %83, %84
    %85:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %86:i32 = load %85
    %x_101:i32 = let %86
    %88:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %89:i32 = load %88
    %x_103:i32 = let %89
    %91:ptr<function, i32, read_write> = access %r, %x_101
    %92:i32 = negation %x_103
    store %91, %92
    %93:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %94:i32 = load %93
    %x_107:i32 = let %94
    %96:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %97:i32 = load %96
    %x_109:i32 = let %97
    %99:ptr<function, i32, read_write> = access %r, %x_107
    %100:i32 = negation %x_109
    store %99, %100
    %101:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %102:i32 = load %101
    %x_113:i32 = let %102
    %104:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %105:i32 = load %104
    %x_115:i32 = let %105
    %107:ptr<function, i32, read_write> = access %r, %x_113
    %108:i32 = negation %x_115
    store %107, %108
    %109:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %110:i32 = load %109
    %x_119:i32 = let %110
    %112:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %113:i32 = load %112
    %x_121:i32 = let %113
    %115:ptr<function, i32, read_write> = access %r, %x_119
    %116:i32 = negation %x_121
    store %115, %116
    %117:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
    %118:i32 = load %117
    %x_125:i32 = let %118
    %120:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %121:i32 = load %120
    %x_127:i32 = let %121
    %123:ptr<function, i32, read_write> = access %r, %x_125
    %124:i32 = negation %x_127
    store %123, %124
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %125:i32 = load %i
        %x_134:i32 = let %125
        %127:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
        %128:i32 = load %127
        %x_136:i32 = let %128
        %130:bool = lt %x_134, %x_136
        if %130 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %131:i32 = load %i
        %x_139:i32 = let %131
        %133:i32 = load %i
        %x_140:i32 = let %133
        %135:i32 = load %i
        %x_142:i32 = let %135
        %137:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %138:i32 = load %137
        %x_145:i32 = let %138
        %140:ptr<function, i32, read_write> = access %data, %x_139
        %141:i32 = complement %x_140
        %142:i32 = complement %x_142
        %143:i32 = max %141, %142
        %144:i32 = min %143, %x_145
        %145:i32 = complement %144
        store %140, %145
        continue  # -> $B4
      }
      $B4: {  # continuing
        %146:i32 = load %i
        %x_149:i32 = let %146
        %148:i32 = add %x_149, 1i
        store %i, %148
        next_iteration  # -> $B3
      }
    }
    %149:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %150:i32 = load %149
    %x_152:i32 = let %150
    store %i_1, %x_152
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %152:i32 = load %i_1
        %x_157:i32 = let %152
        %154:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
        %155:i32 = load %154
        %x_159:i32 = let %155
        %157:bool = lt %x_157, %x_159
        if %157 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %158:i32 = load %i_1
        %x_162:i32 = let %158
        %160:i32 = load %i_1
        %x_163:i32 = let %160
        %162:ptr<function, i32, read_write> = access %data, %x_162
        %163:i32 = complement %x_163
        %164:i32 = max %163, 0i
        %165:i32 = min %164, 1i
        %166:i32 = complement %165
        store %162, %166
        continue  # -> $B8
      }
      $B8: {  # continuing
        %167:i32 = load %i_1
        %x_168:i32 = let %167
        %169:i32 = add %x_168, 1i
        store %i_1, %169
        next_iteration  # -> $B7
      }
    }
    %170:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %171:i32 = load %170
    %x_171:i32 = let %171
    store %i_2, %x_171
    loop [b: $B11, c: $B12] {  # loop_3
      $B11: {  # body
        %173:i32 = load %i_2
        %x_176:i32 = let %173
        %175:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %176:i32 = load %175
        %x_178:i32 = let %176
        %178:bool = lt %x_176, %x_178
        if %178 [t: $B13, f: $B14] {  # if_3
          $B13: {  # true
            exit_if  # if_3
          }
          $B14: {  # false
            exit_loop  # loop_3
          }
        }
        %179:i32 = load %i_2
        %x_181:i32 = let %179
        %181:i32 = load %i_2
        %x_182:i32 = let %181
        %183:ptr<function, i32, read_write> = access %data, %x_181
        %184:i32 = max %x_182, 0i
        %185:i32 = min %184, 1i
        %186:i32 = complement %185
        store %183, %186
        continue  # -> $B12
      }
      $B12: {  # continuing
        %187:i32 = load %i_2
        %x_186:i32 = let %187
        %189:i32 = add %x_186, 1i
        store %i_2, %189
        next_iteration  # -> $B11
      }
    }
    %190:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %191:i32 = load %190
    %x_189:i32 = let %191
    store %i_3, %x_189
    loop [b: $B15, c: $B16] {  # loop_4
      $B15: {  # body
        %193:i32 = load %i_3
        %x_194:i32 = let %193
        %195:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %196:i32 = load %195
        %x_196:i32 = let %196
        %198:bool = lt %x_194, %x_196
        if %198 [t: $B17, f: $B18] {  # if_4
          $B17: {  # true
            exit_if  # if_4
          }
          $B18: {  # false
            exit_loop  # loop_4
          }
        }
        %199:i32 = load %i_3
        %x_199:i32 = let %199
        %201:ptr<function, i32, read_write> = access %data, %x_199
        %202:i32 = load %201
        %x_201:i32 = let %202
        %204:i32 = load %i_3
        %x_202:i32 = let %204
        %206:ptr<function, i32, read_write> = access %r, %x_202
        %207:i32 = load %206
        %x_204:i32 = let %207
        %209:bool = neq %x_201, %x_204
        if %209 [t: $B19] {  # if_5
          $B19: {  # true
            %210:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %211:i32 = load %210
            %x_209:i32 = let %211
            %213:f32 = convert %x_209
            %x_210:f32 = let %213
            %215:vec4<f32> = construct %x_210, %x_210, %x_210, %x_210
            store %x_GLF_color, %215
            ret
          }
        }
        continue  # -> $B16
      }
      $B16: {  # continuing
        %216:i32 = load %i_3
        %x_212:i32 = let %216
        %218:i32 = add %x_212, 1i
        store %i_3, %218
        next_iteration  # -> $B15
      }
    }
    %219:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %220:i32 = load %219
    %x_215:i32 = let %220
    %222:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %223:i32 = load %222
    %x_218:i32 = let %223
    %225:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %226:i32 = load %225
    %x_221:i32 = let %226
    %228:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %229:i32 = load %228
    %x_224:i32 = let %229
    %231:f32 = convert %x_215
    %232:f32 = let %231
    %233:f32 = convert %x_218
    %234:f32 = let %233
    %235:f32 = convert %x_221
    %236:f32 = let %235
    %237:f32 = convert %x_224
    %238:vec4<f32> = construct %232, %234, %236, %237
    store %x_GLF_color, %238
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B20: {
    %240:void = call %main_1
    %241:vec4<f32> = load %x_GLF_color
    %242:main_out = construct %241
    ret %242
  }
}

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