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, 3> @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_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %sums:ptr<function, array<f32, 2>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %d:ptr<function, i32, read_write> = var
    %indexable:ptr<function, mat2x2<f32>, read_write> = var
    %indexable_1:ptr<function, mat2x2<f32>, read_write> = var
    %x_158:ptr<function, bool, read_write> = var
    %x_159:ptr<function, bool, read_write> = var
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_16:i32 = let %15
    %17:ptr<function, f32, read_write> = access %sums, %x_16
    %18:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %19:f32 = load %18
    %20:f32 = negation %19
    store %17, %20
    %21:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %22:i32 = load %21
    %x_18:i32 = let %22
    %24:ptr<function, f32, read_write> = access %sums, %x_18
    %25:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %26:f32 = load %25
    %27:f32 = negation %26
    store %24, %27
    %28:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %29:i32 = load %28
    store %a, %29
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %30:i32 = load %a
        %31:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %32:i32 = load %31
        %33:bool = lt %30, %32
        if %33 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %35:i32 = load %34
        store %b, %35
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %36:i32 = load %b
            %37:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
            %38:i32 = load %37
            %39:bool = lt %36, %38
            if %39 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %40:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %41:i32 = load %40
            store %c, %41
            loop [b: $B11, c: $B12] {  # loop_3
              $B11: {  # body
                %42:i32 = load %c
                %43:i32 = load %a
                %44:bool = lte %42, %43
                if %44 [t: $B13, f: $B14] {  # if_3
                  $B13: {  # true
                    exit_if  # if_3
                  }
                  $B14: {  # false
                    exit_loop  # loop_3
                  }
                }
                %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
                %46:i32 = load %45
                store %d, %46
                loop [b: $B15, c: $B16] {  # loop_4
                  $B15: {  # body
                    %47:i32 = load %d
                    %48:ptr<uniform, i32, read> = access %x_6, 0u, 3i, 0u
                    %49:i32 = load %48
                    %50:bool = lt %47, %49
                    if %50 [t: $B17, f: $B18] {  # if_4
                      $B17: {  # true
                        exit_if  # if_4
                      }
                      $B18: {  # false
                        exit_loop  # loop_4
                      }
                    }
                    %51:i32 = load %a
                    %x_31:i32 = let %51
                    %53:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                    %54:i32 = load %53
                    %55:f32 = convert %54
                    %x_125:f32 = let %55
                    %57:i32 = load %c
                    %x_33:i32 = let %57
                    %59:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                    %60:i32 = load %59
                    %x_34:i32 = let %60
                    %62:vec2<f32> = construct %x_125, 0.0f
                    %63:vec2<f32> = let %62
                    %64:vec2<f32> = construct 0.0f, %x_125
                    %65:mat2x2<f32> = construct %63, %64
                    store %indexable, %65
                    %66:ptr<function, f32, read_write> = access %sums, %x_31
                    %67:ptr<function, vec2<f32>, read_write> = access %indexable, %x_33
                    %68:f32 = load_vector_element %67, %x_34
                    store %66, %68
                    %69:i32 = load %a
                    %x_35:i32 = let %69
                    %71:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                    %72:i32 = load %71
                    %73:f32 = convert %72
                    %x_134:f32 = let %73
                    %75:i32 = load %c
                    %x_37:i32 = let %75
                    %77:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
                    %78:i32 = load %77
                    %x_38:i32 = let %78
                    %80:vec2<f32> = construct %x_134, 0.0f
                    %81:vec2<f32> = let %80
                    %82:vec2<f32> = construct 0.0f, %x_134
                    %83:mat2x2<f32> = construct %81, %82
                    store %indexable_1, %83
                    %84:ptr<function, f32, read_write> = access %sums, %x_35
                    %85:ptr<function, f32, read_write> = access %sums, %x_35
                    %86:f32 = load %85
                    %87:ptr<function, vec2<f32>, read_write> = access %indexable_1, %x_37
                    %88:f32 = load_vector_element %87, %x_38
                    %89:f32 = add %86, %88
                    store %84, %89
                    continue  # -> $B16
                  }
                  $B16: {  # continuing
                    %90:i32 = load %d
                    %91:i32 = add %90, 1i
                    store %d, %91
                    next_iteration  # -> $B15
                  }
                }
                continue  # -> $B12
              }
              $B12: {  # continuing
                %92:i32 = load %c
                %93:i32 = add %92, 1i
                store %c, %93
                next_iteration  # -> $B11
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %94:i32 = load %b
            %95:i32 = add %94, 1i
            store %b, %95
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %96:i32 = load %a
        %97:i32 = add %96, 1i
        store %a, %97
        next_iteration  # -> $B3
      }
    }
    %98:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %99:i32 = load %98
    %100:ptr<function, f32, read_write> = access %sums, %99
    %101:f32 = load %100
    %102:ptr<uniform, f32, read> = access %x_8, 0u, 1i, 0u
    %103:f32 = load %102
    %104:bool = eq %101, %103
    %x_150:bool = let %104
    store %x_159, %x_150
    if %x_150 [t: $B19] {  # if_5
      $B19: {  # true
        %106:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %107:i32 = load %106
        %108:ptr<function, f32, read_write> = access %sums, %107
        %109:f32 = load %108
        %110:ptr<uniform, f32, read> = access %x_8, 0u, 2i, 0u
        %111:f32 = load %110
        %112:bool = eq %109, %111
        store %x_158, %112
        %113:bool = load %x_158
        store %x_159, %113
        exit_if  # if_5
      }
    }
    %114:bool = load %x_159
    if %114 [t: $B20, f: $B21] {  # if_6
      $B20: {  # true
        %115:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %116:i32 = load %115
        %117:f32 = convert %116
        %118:f32 = let %117
        %119:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %120:i32 = load %119
        %121:f32 = convert %120
        %122:f32 = let %121
        %123:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %124:i32 = load %123
        %125:f32 = convert %124
        %126:f32 = let %125
        %127:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %128:i32 = load %127
        %129:f32 = convert %128
        %130:vec4<f32> = construct %118, %122, %126, %129
        store %x_GLF_color, %130
        exit_if  # if_6
      }
      $B21: {  # false
        %131:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %132:i32 = load %131
        %133:f32 = convert %132
        %134:vec4<f32> = construct %133
        store %x_GLF_color, %134
        exit_if  # if_6
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B22: {
    %136:void = call %main_1
    %137:vec4<f32> = load %x_GLF_color
    %138:main_out = construct %137
    ret %138
  }
}

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