SKIP: FAILED

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

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

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

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

%main_1 = func():void {
  $B2: {
    %m:ptr<function, mat2x2<f32>, read_write> = var
    %f:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %9:i32 = load %8
    %10:bool = eq %9, 1i
    if %10 [t: $B3] {  # if_1
      $B3: {  # true
        %11:f32 = load %f
        %12:vec2<f32> = construct %11, 0.0f
        %13:vec2<f32> = let %12
        %14:f32 = load %f
        %15:vec2<f32> = construct 0.0f, %14
        %16:mat2x2<f32> = construct %13, %15
        store %m, %16
        exit_if  # if_1
      }
    }
    %17:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %18:i32 = load %17
    store %i, %18
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %19:i32 = load %i
        %20:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
        %21:i32 = load %20
        %22:bool = lt %19, %21
        if %22 [t: $B6, f: $B7] {  # if_2
          $B6: {  # true
            exit_if  # if_2
          }
          $B7: {  # false
            exit_loop  # loop_1
          }
        }
        %23:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %24:i32 = load %23
        store %j, %24
        loop [b: $B8, c: $B9] {  # loop_2
          $B8: {  # body
            %25:i32 = load %j
            %26:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
            %27:i32 = load %26
            %28:bool = lt %25, %27
            if %28 [t: $B10, f: $B11] {  # if_3
              $B10: {  # true
                exit_if  # if_3
              }
              $B11: {  # false
                exit_loop  # loop_2
              }
            }
            %29:i32 = load %i
            %x_66:i32 = let %29
            %31:i32 = load %j
            %x_67:i32 = let %31
            %33:ptr<function, vec2<f32>, read_write> = access %m, %x_66
            %34:i32 = load %i
            %35:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
            %36:i32 = load %35
            %37:i32 = mul %34, %36
            %38:i32 = load %j
            %39:i32 = add %37, %38
            %40:f32 = convert %39
            store_vector_element %33, %x_67, %40
            continue  # -> $B9
          }
          $B9: {  # continuing
            %41:i32 = load %j
            %42:i32 = add %41, 1i
            store %j, %42
            next_iteration  # -> $B8
          }
        }
        continue  # -> $B5
      }
      $B5: {  # continuing
        %43:i32 = load %i
        %44:i32 = add %43, 1i
        store %i, %44
        next_iteration  # -> $B4
      }
    }
    %45:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
    %46:i32 = load %45
    %47:f32 = convert %46
    %48:f32 = let %47
    %49:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
    %50:i32 = load %49
    %51:f32 = convert %50
    %52:vec2<f32> = construct %48, %51
    %53:vec2<f32> = let %52
    %54:ptr<uniform, i32, read> = access %x_5, 0u, 0i, 0u
    %55:i32 = load %54
    %56:f32 = convert %55
    %57:f32 = let %56
    %58:ptr<uniform, i32, read> = access %x_5, 0u, 3i, 0u
    %59:i32 = load %58
    %60:f32 = convert %59
    %61:vec2<f32> = construct %57, %60
    %62:mat2x2<f32> = construct %53, %61
    %x_95:mat2x2<f32> = let %62
    %64:ptr<function, vec2<f32>, read_write> = access %m, 0u
    %65:vec2<f32> = load %64
    %66:vec2<f32> = access %x_95, 0u
    %67:vec2<bool> = eq %65, %66
    %68:bool = all %67
    %69:bool = let %68
    %70:ptr<function, vec2<f32>, read_write> = access %m, 1u
    %71:vec2<f32> = load %70
    %72:vec2<f32> = access %x_95, 1u
    %73:vec2<bool> = eq %71, %72
    %74:bool = all %73
    %75:bool = and %69, %74
    if %75 [t: $B12, f: $B13] {  # if_4
      $B12: {  # true
        %76:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
        %77:i32 = load %76
        %78:f32 = convert %77
        %79:f32 = let %78
        %80:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %81:i32 = load %80
        %82:f32 = convert %81
        %83:f32 = let %82
        %84:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %85:i32 = load %84
        %86:f32 = convert %85
        %87:f32 = let %86
        %88:ptr<uniform, i32, read> = access %x_5, 0u, 2i, 0u
        %89:i32 = load %88
        %90:f32 = convert %89
        %91:vec4<f32> = construct %79, %83, %87, %90
        store %x_GLF_color, %91
        exit_if  # if_4
      }
      $B13: {  # false
        %92:ptr<uniform, i32, read> = access %x_5, 0u, 1i, 0u
        %93:i32 = load %92
        %94:f32 = convert %93
        %95:vec4<f32> = construct %94
        store %x_GLF_color, %95
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B14: {
    %97:void = call %main_1
    %98:vec4<f32> = load %x_GLF_color
    %99:main_out = construct %98
    ret %99
  }
}

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