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<function, i32, read_write> = access %r, %x_46
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %15:i32 = load %14
    store %13, %15
    %16:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %17:i32 = load %16
    %x_51:i32 = let %17
    %19:ptr<function, i32, read_write> = access %r, %x_51
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %21:i32 = load %20
    store %19, %21
    %22:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %23:i32 = load %22
    %x_56:i32 = let %23
    %25:ptr<function, i32, read_write> = access %r, %x_56
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %27:i32 = load %26
    store %25, %27
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %29:i32 = load %28
    %x_61:i32 = let %29
    %31:ptr<function, i32, read_write> = access %r, %x_61
    %32:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %33:i32 = load %32
    store %31, %33
    %34:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %35:i32 = load %34
    %x_66:i32 = let %35
    %37:ptr<function, i32, read_write> = access %r, %x_66
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %39:i32 = load %38
    store %37, %39
    %40:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %41:i32 = load %40
    %x_71:i32 = let %41
    %43:ptr<function, i32, read_write> = access %r, %x_71
    %44:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %45:i32 = load %44
    %46:i32 = negation %45
    store %43, %46
    %47:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %48:i32 = load %47
    %x_77:i32 = let %48
    %50:ptr<function, i32, read_write> = access %r, %x_77
    %51:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %52:i32 = load %51
    %53:i32 = negation %52
    store %50, %53
    %54:ptr<uniform, i32, read> = access %x_6, 0u, 9i, 0u
    %55:i32 = load %54
    %x_83:i32 = let %55
    %57:ptr<function, i32, read_write> = access %r, %x_83
    %58:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %59:i32 = load %58
    %60:i32 = negation %59
    store %57, %60
    %61:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %62:i32 = load %61
    %x_89:i32 = let %62
    %64:ptr<function, i32, read_write> = access %r, %x_89
    %65:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %66:i32 = load %65
    %67:i32 = negation %66
    store %64, %67
    %68:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %69:i32 = load %68
    %x_95:i32 = let %69
    %71:ptr<function, i32, read_write> = access %r, %x_95
    %72:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %73:i32 = load %72
    %74:i32 = negation %73
    store %71, %74
    %75:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %76:i32 = load %75
    %x_101:i32 = let %76
    %78:ptr<function, i32, read_write> = access %r, %x_101
    %79:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %80:i32 = load %79
    %81:i32 = negation %80
    store %78, %81
    %82:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %83:i32 = load %82
    %x_107:i32 = let %83
    %85:ptr<function, i32, read_write> = access %r, %x_107
    %86:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %87:i32 = load %86
    %88:i32 = negation %87
    store %85, %88
    %89:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %90:i32 = load %89
    %x_113:i32 = let %90
    %92:ptr<function, i32, read_write> = access %r, %x_113
    %93:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %94:i32 = load %93
    %95:i32 = negation %94
    store %92, %95
    %96:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %97:i32 = load %96
    %x_119:i32 = let %97
    %99:ptr<function, i32, read_write> = access %r, %x_119
    %100:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %101:i32 = load %100
    %102:i32 = negation %101
    store %99, %102
    %103:ptr<uniform, i32, read> = access %x_6, 0u, 15i, 0u
    %104:i32 = load %103
    %x_125:i32 = let %104
    %106:ptr<function, i32, read_write> = access %r, %x_125
    %107:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %108:i32 = load %107
    %109:i32 = negation %108
    store %106, %109
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %110:i32 = load %i
        %111:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
        %112:i32 = load %111
        %113:bool = lt %110, %112
        if %113 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %114:i32 = load %i
        %x_139:i32 = let %114
        %116:ptr<function, i32, read_write> = access %data, %x_139
        %117:i32 = load %i
        %118:i32 = complement %117
        %119:i32 = load %i
        %120:i32 = complement %119
        %121:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %122:i32 = load %121
        %123:i32 = let %122
        %124:i32 = max %118, %120
        %125:i32 = min %124, %123
        %126:i32 = complement %125
        store %116, %126
        continue  # -> $B4
      }
      $B4: {  # continuing
        %127:i32 = load %i
        %128:i32 = add %127, 1i
        store %i, %128
        next_iteration  # -> $B3
      }
    }
    %129:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %130:i32 = load %129
    store %i_1, %130
    loop [b: $B7, c: $B8] {  # loop_2
      $B7: {  # body
        %131:i32 = load %i_1
        %132:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
        %133:i32 = load %132
        %134:bool = lt %131, %133
        if %134 [t: $B9, f: $B10] {  # if_2
          $B9: {  # true
            exit_if  # if_2
          }
          $B10: {  # false
            exit_loop  # loop_2
          }
        }
        %135:i32 = load %i_1
        %x_162:i32 = let %135
        %137:ptr<function, i32, read_write> = access %data, %x_162
        %138:i32 = load %i_1
        %139:i32 = complement %138
        %140:i32 = max %139, 0i
        %141:i32 = min %140, 1i
        %142:i32 = complement %141
        store %137, %142
        continue  # -> $B8
      }
      $B8: {  # continuing
        %143:i32 = load %i_1
        %144:i32 = add %143, 1i
        store %i_1, %144
        next_iteration  # -> $B7
      }
    }
    %145:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %146:i32 = load %145
    store %i_2, %146
    loop [b: $B11, c: $B12] {  # loop_3
      $B11: {  # body
        %147:i32 = load %i_2
        %148:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %149:i32 = load %148
        %150:bool = lt %147, %149
        if %150 [t: $B13, f: $B14] {  # if_3
          $B13: {  # true
            exit_if  # if_3
          }
          $B14: {  # false
            exit_loop  # loop_3
          }
        }
        %151:i32 = load %i_2
        %x_181:i32 = let %151
        %153:ptr<function, i32, read_write> = access %data, %x_181
        %154:i32 = load %i_2
        %155:i32 = max %154, 0i
        %156:i32 = min %155, 1i
        %157:i32 = complement %156
        store %153, %157
        continue  # -> $B12
      }
      $B12: {  # continuing
        %158:i32 = load %i_2
        %159:i32 = add %158, 1i
        store %i_2, %159
        next_iteration  # -> $B11
      }
    }
    %160:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %161:i32 = load %160
    store %i_3, %161
    loop [b: $B15, c: $B16] {  # loop_4
      $B15: {  # body
        %162:i32 = load %i_3
        %163:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %164:i32 = load %163
        %165:bool = lt %162, %164
        if %165 [t: $B17, f: $B18] {  # if_4
          $B17: {  # true
            exit_if  # if_4
          }
          $B18: {  # false
            exit_loop  # loop_4
          }
        }
        %166:i32 = load %i_3
        %167:ptr<function, i32, read_write> = access %data, %166
        %168:i32 = load %167
        %169:i32 = load %i_3
        %170:ptr<function, i32, read_write> = access %r, %169
        %171:i32 = load %170
        %172:bool = neq %168, %171
        if %172 [t: $B19] {  # if_5
          $B19: {  # true
            %173:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %174:i32 = load %173
            %175:f32 = convert %174
            %176:vec4<f32> = construct %175
            store %x_GLF_color, %176
            ret
          }
        }
        continue  # -> $B16
      }
      $B16: {  # continuing
        %177:i32 = load %i_3
        %178:i32 = add %177, 1i
        store %i_3, %178
        next_iteration  # -> $B15
      }
    }
    %179:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %180:i32 = load %179
    %181:f32 = convert %180
    %182:f32 = let %181
    %183:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %184:i32 = load %183
    %185:f32 = convert %184
    %186:f32 = let %185
    %187:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %188:i32 = load %187
    %189:f32 = convert %188
    %190:f32 = let %189
    %191:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %192:i32 = load %191
    %193:f32 = convert %192
    %194:vec4<f32> = construct %182, %186, %190, %193
    store %x_GLF_color, %194
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B20: {
    %196:void = call %main_1
    %197:vec4<f32> = load %x_GLF_color
    %198:main_out = construct %197
    ret %198
  }
}

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