SKIP: FAILED

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

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

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

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

strided_arr_2 = struct @align(4) {
  el:f32 @offset(0)
}

buf2 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_2, 3> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %v:ptr<function, vec4<f32>, read_write> = var
    %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %8:u32 = load %7
    %x_39:u32 = let %8
    %10:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %11:u32 = load %10
    %x_41:u32 = let %11
    %13:u32 = select %x_41, 92382u, true
    %14:u32 = call %tint_div_u32, %x_39, %13
    %16:vec4<f32> = unpack4x8unorm %14
    store %v, %16
    %17:vec4<f32> = load %v
    %x_45:vec4<f32> = let %17
    %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %20:i32 = load %19
    %x_47:i32 = let %20
    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %23:i32 = load %22
    %x_50:i32 = let %23
    %25:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %26:i32 = load %25
    %x_53:i32 = let %26
    %28:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %29:f32 = load %28
    %x_56:f32 = let %29
    %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
    %32:f32 = load %31
    %x_58:f32 = let %32
    %34:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %35:f32 = load %34
    %x_63:f32 = let %35
    %37:f32 = convert %x_47
    %38:f32 = let %37
    %39:f32 = convert %x_50
    %40:f32 = let %39
    %41:f32 = convert %x_53
    %42:f32 = div %x_56, %x_58
    %43:vec4<f32> = construct %38, %40, %41, %42
    %44:f32 = distance %x_45, %43
    %45:bool = lt %44, %x_63
    if %45 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %46:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %47:i32 = load %46
        %x_69:i32 = let %47
        %49:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %50:i32 = load %49
        %x_72:i32 = let %50
        %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %53:i32 = load %52
        %x_75:i32 = let %53
        %55:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %56:i32 = load %55
        %x_78:i32 = let %56
        %58:f32 = convert %x_69
        %59:f32 = let %58
        %60:f32 = convert %x_72
        %61:f32 = let %60
        %62:f32 = convert %x_75
        %63:f32 = let %62
        %64:f32 = convert %x_78
        %65:vec4<f32> = construct %59, %61, %63, %64
        store %x_GLF_color, %65
        exit_if  # if_1
      }
      $B4: {  # false
        %66:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %67:i32 = load %66
        %x_82:i32 = let %67
        %69:f32 = convert %x_82
        %x_83:f32 = let %69
        %71:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
        store %x_GLF_color, %71
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %73:void = call %main_1
    %74:vec4<f32> = load %x_GLF_color
    %75:main_out = construct %74
    ret %75
  }
}
%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
  $B6: {
    %78:bool = eq %rhs, 0u
    %79:u32 = select %rhs, 1u, %78
    %80:u32 = div %lhs, %79
    ret %80
  }
}

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