SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(4) {
  el:f32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 2> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:i32 @offset(0)
}

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

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

$B1: {  # root
  %x_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %m23:ptr<function, mat2x3<f32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %9:f32 = load %8
    %x_46:f32 = let %9
    %11:vec3<f32> = construct %x_46, 0.0f, 0.0f
    %12:vec3<f32> = let %11
    %13:vec3<f32> = construct 0.0f, %x_46, 0.0f
    %14:mat2x3<f32> = construct %12, %13
    store %m23, %14
    store %i, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_80:ptr<function, bool, read_write> = var
        %x_81_phi:ptr<function, bool, read_write> = var
        %17:i32 = load %i
        %x_54:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_10, 0u, 3i, 0u
        %20:i32 = load %19
        %x_56:i32 = let %20
        %22:bool = lt %x_54, %x_56
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %24:i32 = load %23
        %x_60:i32 = let %24
        %26:ptr<uniform, i32, read> = access %x_10, 0u, 2i, 0u
        %27:i32 = load %26
        %x_62:i32 = let %27
        %29:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %30:f32 = load %29
        %x_64:f32 = let %30
        %32:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
        %33:f32 = load_vector_element %32, %x_62
        %x_66:f32 = let %33
        %35:ptr<function, vec3<f32>, read_write> = access %m23, %x_60
        %36:f32 = add %x_66, %x_64
        store_vector_element %35, %x_62, %36
        %37:f32 = load_vector_element %gl_FragCoord, 1u
        %x_70:f32 = let %37
        %39:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %40:f32 = load %39
        %x_72:f32 = let %40
        %42:bool = lt %x_70, %x_72
        if %42 [t: $B7] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
        }
        store %x_81_phi, true
        if true [t: $B8] {  # if_3
          $B8: {  # true
            %43:f32 = load_vector_element %gl_FragCoord, 0u
            %x_79:f32 = let %43
            %45:bool = lt %x_79, 0.0f
            store %x_80, %45
            %46:bool = load %x_80
            store %x_81_phi, %46
            exit_if  # if_3
          }
        }
        %47:bool = load %x_81_phi
        %x_81:bool = let %47
        %49:bool = eq %x_81, false
        if %49 [t: $B9] {  # if_4
          $B9: {  # true
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %50:i32 = load %i
        %x_85:i32 = let %50
        %52:i32 = add %x_85, 1i
        store %i, %52
        next_iteration  # -> $B3
      }
    }
    %53:mat2x3<f32> = load %m23
    %x_87:mat2x3<f32> = let %53
    %55:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %56:i32 = load %55
    %x_89:i32 = let %56
    %58:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %59:i32 = load %58
    %x_92:i32 = let %59
    %61:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %62:i32 = load %61
    %x_95:i32 = let %62
    %64:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %65:i32 = load %64
    %x_98:i32 = let %65
    %67:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
    %68:i32 = load %67
    %x_101:i32 = let %68
    %70:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %71:i32 = load %70
    %x_104:i32 = let %71
    %73:f32 = convert %x_89
    %74:f32 = let %73
    %75:f32 = convert %x_92
    %76:f32 = let %75
    %77:f32 = convert %x_95
    %78:vec3<f32> = construct %74, %76, %77
    %79:vec3<f32> = let %78
    %80:f32 = convert %x_98
    %81:f32 = let %80
    %82:f32 = convert %x_101
    %83:f32 = let %82
    %84:f32 = convert %x_104
    %85:vec3<f32> = construct %81, %83, %84
    %86:mat2x3<f32> = construct %79, %85
    %x_108:mat2x3<f32> = let %86
    %88:vec3<f32> = access %x_87, 0u
    %89:vec3<f32> = access %x_108, 0u
    %90:vec3<bool> = eq %88, %89
    %91:bool = all %90
    %92:bool = let %91
    %93:vec3<f32> = access %x_87, 1u
    %94:vec3<f32> = access %x_108, 1u
    %95:vec3<bool> = eq %93, %94
    %96:bool = all %95
    %97:bool = and %92, %96
    if %97 [t: $B10, f: $B11] {  # if_5
      $B10: {  # true
        %98:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %99:i32 = load %98
        %x_122:i32 = let %99
        %101:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %102:i32 = load %101
        %x_125:i32 = let %102
        %104:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %105:i32 = load %104
        %x_128:i32 = let %105
        %107:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %108:i32 = load %107
        %x_131:i32 = let %108
        %110:f32 = convert %x_122
        %111:f32 = let %110
        %112:f32 = convert %x_125
        %113:f32 = let %112
        %114:f32 = convert %x_128
        %115:f32 = let %114
        %116:f32 = convert %x_131
        %117:vec4<f32> = construct %111, %113, %115, %116
        store %x_GLF_color, %117
        exit_if  # if_5
      }
      $B11: {  # false
        %118:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %119:i32 = load %118
        %x_135:i32 = let %119
        %121:f32 = convert %x_135
        %x_136:f32 = let %121
        %123:vec4<f32> = construct %x_136, %x_136, %x_136, %x_136
        store %x_GLF_color, %123
        exit_if  # if_5
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B12: {
    store %gl_FragCoord, %gl_FragCoord_param
    %126:void = call %main_1
    %127:vec4<f32> = load %x_GLF_color
    %128:main_out = construct %127
    ret %128
  }
}

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