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, 4> @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, 1> @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: {
    %m0:ptr<function, mat4x4<f32>, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %m1:ptr<function, mat4x4<f32>, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %9:i32 = load %8
    %10:f32 = convert %9
    %x_41:f32 = let %10
    %12:vec4<f32> = construct %x_41, 0.0f, 0.0f, 0.0f
    %13:vec4<f32> = let %12
    %14:vec4<f32> = construct 0.0f, %x_41, 0.0f, 0.0f
    %15:vec4<f32> = let %14
    %16:vec4<f32> = construct 0.0f, 0.0f, %x_41, 0.0f
    %17:vec4<f32> = let %16
    %18:vec4<f32> = construct 0.0f, 0.0f, 0.0f, %x_41
    %19:mat4x4<f32> = construct %13, %15, %17, %18
    store %m0, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %21:i32 = load %20
    store %c, %21
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %22:i32 = load %c
        %23:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %24:i32 = load %23
        %25:bool = lt %22, %24
        if %25 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %26:mat4x4<f32> = load %m0
        store %m1, %26
        %27:i32 = load %c
        %x_59:i32 = let %27
        %29:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %30:i32 = load %29
        %x_61:i32 = let %30
        %32:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %33:i32 = load %32
        %x_64:i32 = let %33
        %35:i32 = call %tint_mod_i32, %x_59, %x_61
        %37:ptr<function, vec4<f32>, read_write> = access %m1, %35
        %38:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
        %39:f32 = load %38
        store_vector_element %37, %x_64, %39
        %40:i32 = load %c
        %x_68:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
        %43:i32 = load %42
        %x_70:i32 = let %43
        %45:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %46:i32 = load %45
        %x_73:i32 = let %46
        %48:i32 = call %tint_mod_i32, %x_68, %x_70
        %49:ptr<function, vec4<f32>, read_write> = access %m0, %48
        %50:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
        %51:f32 = load %50
        store_vector_element %49, %x_73, %51
        continue  # -> $B4
      }
      $B4: {  # continuing
        %52:i32 = load %c
        %53:i32 = add %52, 1i
        store %c, %53
        next_iteration  # -> $B3
      }
    }
    %54:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %55:i32 = load %54
    %56:f32 = convert %55
    %57:f32 = let %56
    %58:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %59:i32 = load %58
    %60:f32 = convert %59
    %61:f32 = let %60
    %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %63:i32 = load %62
    %64:f32 = convert %63
    %65:f32 = let %64
    %66:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %67:i32 = load %66
    %68:f32 = convert %67
    %69:vec4<f32> = construct %57, %61, %65, %68
    %70:vec4<f32> = let %69
    %71:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %72:i32 = load %71
    %73:f32 = convert %72
    %74:f32 = let %73
    %75:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %76:i32 = load %75
    %77:f32 = convert %76
    %78:f32 = let %77
    %79:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %80:i32 = load %79
    %81:f32 = convert %80
    %82:f32 = let %81
    %83:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %84:i32 = load %83
    %85:f32 = convert %84
    %86:vec4<f32> = construct %74, %78, %82, %85
    %87:vec4<f32> = let %86
    %88:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %89:i32 = load %88
    %90:f32 = convert %89
    %91:f32 = let %90
    %92:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %93:i32 = load %92
    %94:f32 = convert %93
    %95:f32 = let %94
    %96:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %97:i32 = load %96
    %98:f32 = convert %97
    %99:f32 = let %98
    %100:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %101:i32 = load %100
    %102:f32 = convert %101
    %103:vec4<f32> = construct %91, %95, %99, %102
    %104:vec4<f32> = let %103
    %105:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %106:i32 = load %105
    %107:f32 = convert %106
    %108:f32 = let %107
    %109:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %110:i32 = load %109
    %111:f32 = convert %110
    %112:f32 = let %111
    %113:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %114:i32 = load %113
    %115:f32 = convert %114
    %116:f32 = let %115
    %117:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %118:i32 = load %117
    %119:f32 = convert %118
    %120:vec4<f32> = construct %108, %112, %116, %119
    %121:mat4x4<f32> = construct %70, %87, %104, %120
    %x_132:mat4x4<f32> = let %121
    %123:ptr<function, vec4<f32>, read_write> = access %m0, 0u
    %124:vec4<f32> = load %123
    %125:vec4<f32> = access %x_132, 0u
    %126:vec4<bool> = eq %124, %125
    %127:bool = all %126
    %128:bool = let %127
    %129:ptr<function, vec4<f32>, read_write> = access %m0, 1u
    %130:vec4<f32> = load %129
    %131:vec4<f32> = access %x_132, 1u
    %132:vec4<bool> = eq %130, %131
    %133:bool = all %132
    %134:bool = and %128, %133
    %135:bool = let %134
    %136:ptr<function, vec4<f32>, read_write> = access %m0, 2u
    %137:vec4<f32> = load %136
    %138:vec4<f32> = access %x_132, 2u
    %139:vec4<bool> = eq %137, %138
    %140:bool = all %139
    %141:bool = and %135, %140
    %142:bool = let %141
    %143:ptr<function, vec4<f32>, read_write> = access %m0, 3u
    %144:vec4<f32> = load %143
    %145:vec4<f32> = access %x_132, 3u
    %146:vec4<bool> = eq %144, %145
    %147:bool = all %146
    %148:bool = and %142, %147
    if %148 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %149:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %150:i32 = load %149
        %151:f32 = convert %150
        %152:f32 = let %151
        %153:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %154:i32 = load %153
        %155:f32 = convert %154
        %156:f32 = let %155
        %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %158:i32 = load %157
        %159:f32 = convert %158
        %160:f32 = let %159
        %161:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %162:i32 = load %161
        %163:f32 = convert %162
        %164:vec4<f32> = construct %152, %156, %160, %163
        store %x_GLF_color, %164
        exit_if  # if_2
      }
      $B8: {  # false
        %165:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %166:i32 = load %165
        %167:f32 = convert %166
        %168:vec4<f32> = construct %167
        store %x_GLF_color, %168
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %170:void = call %main_1
    %171:vec4<f32> = load %x_GLF_color
    %172:main_out = construct %171
    ret %172
  }
}
%tint_mod_i32 = func(%lhs:i32, %rhs:i32):i32 {
  $B10: {
    %175:bool = eq %rhs, 0i
    %176:bool = eq %lhs, -2147483648i
    %177:bool = eq %rhs, -1i
    %178:bool = and %176, %177
    %179:bool = or %175, %178
    %180:i32 = select %rhs, 1i, %179
    %181:i32 = let %180
    %182:i32 = div %lhs, %181
    %183:i32 = mul %182, %181
    %184:i32 = sub %lhs, %183
    ret %184
  }
}

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