SKIP: FAILED

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

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

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

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

%f_i1_ = func(%a:ptr<function, i32, read_write>):i32 -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %6:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %7:i32 = load %6
    store %i, %7
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %8:i32 = load %i
        %9:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
        %10:i32 = load %9
        %11:bool = lt %8, %10
        if %11 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %12:i32 = load %i
        %13:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %14:i32 = load %13
        %15:bool = gt %12, %14
        if %15 [t: %b7] {  # if_2
          %b7 = block {  # true
            %x_21:i32 = load %a
            ret %x_21
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %17:i32 = load %i
        %18:i32 = add %17, 1i
        store %i, %18
        next_iteration %b3
      }
    }
    %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_24:i32 = load %19
    ret %x_24
  }
}
%main_1 = func():void -> %b8 {
  %b8 = block {
    %r:ptr<function, array<i32, 10>, read_write> = var
    %i_1:ptr<function, i32, read_write> = var
    %a_1:ptr<function, array<i32, 10>, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %param_1:ptr<function, i32, read_write> = var
    %i_2:ptr<function, i32, read_write> = var
    %28:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_25:i32 = load %28
    %30:ptr<function, i32, read_write> = access %r, %x_25
    %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %32:i32 = load %31
    store %30, %32
    %33:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
    %x_27:i32 = load %33
    %35:ptr<function, i32, read_write> = access %r, %x_27
    %36:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %37:i32 = load %36
    store %35, %37
    %38:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %x_29:i32 = load %38
    %40:ptr<function, i32, read_write> = access %r, %x_29
    %41:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
    %42:i32 = load %41
    store %40, %42
    %43:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %x_31:i32 = load %43
    %45:ptr<function, i32, read_write> = access %r, %x_31
    %46:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
    %47:i32 = load %46
    store %45, %47
    %48:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
    %x_33:i32 = load %48
    %50:ptr<function, i32, read_write> = access %r, %x_33
    %51:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
    %52:i32 = load %51
    store %50, %52
    %53:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
    %x_35:i32 = load %53
    %55:ptr<function, i32, read_write> = access %r, %x_35
    %56:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
    %57:i32 = load %56
    store %55, %57
    %58:ptr<uniform, i32, read> = access %x_8, 0u, 5i, 0u
    %x_37:i32 = load %58
    %60:ptr<function, i32, read_write> = access %r, %x_37
    %61:ptr<uniform, i32, read> = access %x_8, 0u, 7i, 0u
    %62:i32 = load %61
    store %60, %62
    %63:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
    %x_39:i32 = load %63
    %65:ptr<function, i32, read_write> = access %r, %x_39
    %66:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
    %67:i32 = load %66
    store %65, %67
    %68:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
    %x_41:i32 = load %68
    %70:ptr<function, i32, read_write> = access %r, %x_41
    %71:ptr<uniform, i32, read> = access %x_8, 0u, 9i, 0u
    %72:i32 = load %71
    store %70, %72
    %73:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
    %x_43:i32 = load %73
    %75:ptr<function, i32, read_write> = access %r, %x_43
    %76:ptr<uniform, i32, read> = access %x_8, 0u, 10i, 0u
    %77:i32 = load %76
    store %75, %77
    %78:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %79:i32 = load %78
    store %i_1, %79
    loop [b: %b9, c: %b10] {  # loop_2
      %b9 = block {  # body
        %80:i32 = load %i_1
        %81:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
        %82:i32 = load %81
        %83:bool = lt %80, %82
        if %83 [t: %b11, f: %b12] {  # if_3
          %b11 = block {  # true
            exit_if  # if_3
          }
          %b12 = block {  # false
            exit_loop  # loop_2
          }
        }
        %x_48:i32 = load %i_1
        %85:ptr<function, i32, read_write> = access %a_1, %x_48
        %86:i32 = load %i_1
        store %85, %86
        %87:i32 = load %i_1
        %88:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
        %89:i32 = load %88
        %90:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %91:i32 = load %90
        %92:i32 = div %89, %91
        %93:bool = lt %87, %92
        if %93 [t: %b13, f: %b14] {  # if_4
          %b13 = block {  # true
            %x_54:i32 = load %i_1
            %95:ptr<function, i32, read_write> = access %a_1, %x_54
            %96:i32 = load %i_1
            %97:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
            %98:i32 = load %97
            %99:i32 = add %96, %98
            store %95, %99
            %100:i32 = load %i_1
            %101:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
            %102:i32 = load %101
            %103:bool = lt %100, %102
            if %103 [t: %b15] {  # if_5
              %b15 = block {  # true
                continue %b10
              }
            }
            %x_60:i32 = load %i_1
            %105:ptr<function, i32, read_write> = access %a_1, %x_60
            %106:i32 = load %i_1
            %107:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
            %108:i32 = load %107
            %109:i32 = add %106, %108
            store %105, %109
            %110:i32 = load %i_1
            %111:ptr<function, i32, read_write> = access %a_1, %110
            %112:i32 = load %111
            store %param, %112
            %x_66:i32 = call %f_i1_, %param
            %114:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
            %115:i32 = load %114
            %116:bool = lt %x_66, %115
            if %116 [t: %b16] {  # if_6
              %b16 = block {  # true
                %x_68:i32 = load %i_1
                %x_182_save:i32 = let %x_68
                %119:ptr<function, i32, read_write> = access %a_1, %x_182_save
                %120:ptr<function, i32, read_write> = access %a_1, %x_68
                %121:i32 = load %120
                %122:i32 = sub %121, 1i
                store %119, %122
                exit_if  # if_6
              }
            }
            exit_if  # if_4
          }
          %b14 = block {  # false
            %123:i32 = load %i_1
            %124:ptr<function, i32, read_write> = access %a_1, %123
            %125:i32 = load %124
            store %param_1, %125
            %x_73:i32 = call %f_i1_, %param_1
            %127:ptr<uniform, i32, read> = access %x_8, 0u, 8i, 0u
            %128:i32 = load %127
            %129:bool = lt %x_73, %128
            if %129 [t: %b17] {  # if_7
              %b17 = block {  # true
                %x_75:i32 = load %i_1
                %131:ptr<function, i32, read_write> = access %a_1, %x_75
                %132:i32 = load %i_1
                %133:ptr<function, i32, read_write> = access %a_1, %132
                %134:i32 = load %133
                %135:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
                %136:i32 = load %135
                %137:i32 = add %134, %136
                store %131, %137
                exit_if  # if_7
              }
            }
            exit_if  # if_4
          }
        }
        continue %b10
      }
      %b10 = block {  # continuing
        %138:i32 = load %i_1
        %139:i32 = add %138, 1i
        store %i_1, %139
        next_iteration %b9
      }
    }
    %140:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %141:i32 = load %140
    store %i_2, %141
    loop [b: %b18, c: %b19] {  # loop_3
      %b18 = block {  # body
        %142:i32 = load %i_2
        %143:ptr<uniform, i32, read> = access %x_8, 0u, 6i, 0u
        %144:i32 = load %143
        %145:bool = lt %142, %144
        if %145 [t: %b20, f: %b21] {  # if_8
          %b20 = block {  # true
            exit_if  # if_8
          }
          %b21 = block {  # false
            exit_loop  # loop_3
          }
        }
        %146:i32 = load %i_2
        %147:ptr<function, i32, read_write> = access %a_1, %146
        %148:i32 = load %147
        %149:i32 = load %i_2
        %150:ptr<function, i32, read_write> = access %r, %149
        %151:i32 = load %150
        %152:bool = neq %148, %151
        if %152 [t: %b22] {  # if_9
          %b22 = block {  # true
            %153:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
            %154:i32 = load %153
            %155:f32 = convert %154
            %156:vec4<f32> = construct %155
            store %x_GLF_color, %156
            ret
          }
        }
        continue %b19
      }
      %b19 = block {  # continuing
        %157:i32 = load %i_2
        %158:i32 = add %157, 1i
        store %i_2, %158
        next_iteration %b18
      }
    }
    %159:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
    %160:i32 = load %159
    %161:f32 = convert %160
    %162:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %163:i32 = load %162
    %164:f32 = convert %163
    %165:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %166:i32 = load %165
    %167:f32 = convert %166
    %168:ptr<uniform, i32, read> = access %x_8, 0u, 11i, 0u
    %169:i32 = load %168
    %170:f32 = convert %169
    %171:vec4<f32> = construct %161, %164, %167, %170
    store %x_GLF_color, %171
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b23 {
  %b23 = block {
    %173:void = call %main_1
    %174:vec4<f32> = load %x_GLF_color
    %175:main_out = construct %174
    ret %175
  }
}

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