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, 16> @offset(0)
}

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

%b1 = block {  # 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 {
  %b2 = block {
    %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
    %x_46:i32 = load %10
    %12:ptr<function, i32, read_write> = access %r, %x_46
    %13:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %14:i32 = load %13
    store %12, %14
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %x_51:i32 = load %15
    %17:ptr<function, i32, read_write> = access %r, %x_51
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %19:i32 = load %18
    store %17, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %x_56:i32 = load %20
    %22:ptr<function, i32, read_write> = access %r, %x_56
    %23:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %24:i32 = load %23
    store %22, %24
    %25:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %x_61:i32 = load %25
    %27:ptr<function, i32, read_write> = access %r, %x_61
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
    %29:i32 = load %28
    store %27, %29
    %30:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %x_66:i32 = load %30
    %32:ptr<function, i32, read_write> = access %r, %x_66
    %33:ptr<uniform, i32, read> = access %x_6, 0u, 4i, 0u
    %34:i32 = load %33
    store %32, %34
    %35:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %x_71:i32 = load %35
    %37:ptr<function, i32, read_write> = access %r, %x_71
    %38:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %39:i32 = load %38
    %40:i32 = negation %39
    store %37, %40
    %41:ptr<uniform, i32, read> = access %x_6, 0u, 8i, 0u
    %x_77:i32 = load %41
    %43:ptr<function, i32, read_write> = access %r, %x_77
    %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, 9i, 0u
    %x_83:i32 = load %47
    %49:ptr<function, i32, read_write> = access %r, %x_83
    %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %51:i32 = load %50
    %52:i32 = negation %51
    store %49, %52
    %53:ptr<uniform, i32, read> = access %x_6, 0u, 10i, 0u
    %x_89:i32 = load %53
    %55:ptr<function, i32, read_write> = access %r, %x_89
    %56:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %57:i32 = load %56
    %58:i32 = negation %57
    store %55, %58
    %59:ptr<uniform, i32, read> = access %x_6, 0u, 11i, 0u
    %x_95:i32 = load %59
    %61:ptr<function, i32, read_write> = access %r, %x_95
    %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %63:i32 = load %62
    %64:i32 = negation %63
    store %61, %64
    %65:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %x_101:i32 = load %65
    %67:ptr<function, i32, read_write> = access %r, %x_101
    %68:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %69:i32 = load %68
    %70:i32 = negation %69
    store %67, %70
    %71:ptr<uniform, i32, read> = access %x_6, 0u, 12i, 0u
    %x_107:i32 = load %71
    %73:ptr<function, i32, read_write> = access %r, %x_107
    %74:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %75:i32 = load %74
    %76:i32 = negation %75
    store %73, %76
    %77:ptr<uniform, i32, read> = access %x_6, 0u, 13i, 0u
    %x_113:i32 = load %77
    %79:ptr<function, i32, read_write> = access %r, %x_113
    %80:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %81:i32 = load %80
    %82:i32 = negation %81
    store %79, %82
    %83:ptr<uniform, i32, read> = access %x_6, 0u, 14i, 0u
    %x_119:i32 = load %83
    %85:ptr<function, i32, read_write> = access %r, %x_119
    %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, 15i, 0u
    %x_125:i32 = load %89
    %91:ptr<function, i32, read_write> = access %r, %x_125
    %92:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %93:i32 = load %92
    %94:i32 = negation %93
    store %91, %94
    store %i, 0i
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %95:i32 = load %i
        %96:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
        %97:i32 = load %96
        %98:bool = lt %95, %97
        if %98 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_139:i32 = load %i
        %100:ptr<function, i32, read_write> = access %data, %x_139
        %101:i32 = load %i
        %102:i32 = complement %101
        %103:i32 = load %i
        %104:i32 = complement %103
        %105:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %106:i32 = load %105
        %107:i32 = clamp %102, %104, %106
        %108:i32 = complement %107
        store %100, %108
        continue %b4
      }
      %b4 = block {  # continuing
        %109:i32 = load %i
        %110:i32 = add %109, 1i
        store %i, %110
        next_iteration %b3
      }
    }
    %111:ptr<uniform, i32, read> = access %x_6, 0u, 5i, 0u
    %112:i32 = load %111
    store %i_1, %112
    loop [b: %b7, c: %b8] {  # loop_2
      %b7 = block {  # body
        %113:i32 = load %i_1
        %114:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
        %115:i32 = load %114
        %116:bool = lt %113, %115
        if %116 [t: %b9, f: %b10] {  # if_2
          %b9 = block {  # true
            exit_if  # if_2
          }
          %b10 = block {  # false
            exit_loop  # loop_2
          }
        }
        %x_162:i32 = load %i_1
        %118:ptr<function, i32, read_write> = access %data, %x_162
        %119:i32 = load %i_1
        %120:i32 = complement %119
        %121:i32 = clamp %120, 0i, 1i
        %122:i32 = complement %121
        store %118, %122
        continue %b8
      }
      %b8 = block {  # continuing
        %123:i32 = load %i_1
        %124:i32 = add %123, 1i
        store %i_1, %124
        next_iteration %b7
      }
    }
    %125:ptr<uniform, i32, read> = access %x_6, 0u, 6i, 0u
    %126:i32 = load %125
    store %i_2, %126
    loop [b: %b11, c: %b12] {  # loop_3
      %b11 = block {  # body
        %127:i32 = load %i_2
        %128:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %129:i32 = load %128
        %130:bool = lt %127, %129
        if %130 [t: %b13, f: %b14] {  # if_3
          %b13 = block {  # true
            exit_if  # if_3
          }
          %b14 = block {  # false
            exit_loop  # loop_3
          }
        }
        %x_181:i32 = load %i_2
        %132:ptr<function, i32, read_write> = access %data, %x_181
        %133:i32 = load %i_2
        %134:i32 = clamp %133, 0i, 1i
        %135:i32 = complement %134
        store %132, %135
        continue %b12
      }
      %b12 = block {  # continuing
        %136:i32 = load %i_2
        %137:i32 = add %136, 1i
        store %i_2, %137
        next_iteration %b11
      }
    }
    %138:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %139:i32 = load %138
    store %i_3, %139
    loop [b: %b15, c: %b16] {  # loop_4
      %b15 = block {  # body
        %140:i32 = load %i_3
        %141:ptr<uniform, i32, read> = access %x_6, 0u, 7i, 0u
        %142:i32 = load %141
        %143:bool = lt %140, %142
        if %143 [t: %b17, f: %b18] {  # if_4
          %b17 = block {  # true
            exit_if  # if_4
          }
          %b18 = block {  # false
            exit_loop  # loop_4
          }
        }
        %144:i32 = load %i_3
        %145:ptr<function, i32, read_write> = access %data, %144
        %146:i32 = load %145
        %147:i32 = load %i_3
        %148:ptr<function, i32, read_write> = access %r, %147
        %149:i32 = load %148
        %150:bool = neq %146, %149
        if %150 [t: %b19] {  # if_5
          %b19 = block {  # true
            %151:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %152:i32 = load %151
            %153:f32 = convert %152
            %154:vec4<f32> = construct %153
            store %x_GLF_color, %154
            ret
          }
        }
        continue %b16
      }
      %b16 = block {  # continuing
        %155:i32 = load %i_3
        %156:i32 = add %155, 1i
        store %i_3, %156
        next_iteration %b15
      }
    }
    %157:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %158:i32 = load %157
    %159:f32 = convert %158
    %160:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %161:i32 = load %160
    %162:f32 = convert %161
    %163:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %164:i32 = load %163
    %165:f32 = convert %164
    %166:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %167:i32 = load %166
    %168:f32 = convert %167
    %169:vec4<f32> = construct %159, %162, %165, %168
    store %x_GLF_color, %169
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b20 {
  %b20 = block {
    %171:void = call %main_1
    %172:vec4<f32> = load %x_GLF_color
    %173:main_out = construct %172
    ret %173
  }
}

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