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
    %9:u32 = let %8
    %10:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %11:u32 = load %10
    %12:u32 = select %11, 92382u, true
    %13:u32 = call %tint_div_u32, %9, %12
    %15:vec4<f32> = unpack4x8unorm %13
    store %v, %15
    %16:vec4<f32> = load %v
    %17:vec4<f32> = let %16
    %18:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %19:i32 = load %18
    %20:f32 = convert %19
    %21:f32 = let %20
    %22:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %23:i32 = load %22
    %24:f32 = convert %23
    %25:f32 = let %24
    %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %27:i32 = load %26
    %28:f32 = convert %27
    %29:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %30:f32 = load %29
    %31:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
    %32:f32 = load %31
    %33:f32 = div %30, %32
    %34:vec4<f32> = construct %21, %25, %28, %33
    %35:f32 = distance %17, %34
    %36:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %37:f32 = load %36
    %38:bool = lt %35, %37
    if %38 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %40:i32 = load %39
        %41:f32 = convert %40
        %42:f32 = let %41
        %43:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %44:i32 = load %43
        %45:f32 = convert %44
        %46:f32 = let %45
        %47:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %48:i32 = load %47
        %49:f32 = convert %48
        %50:f32 = let %49
        %51:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %52:i32 = load %51
        %53:f32 = convert %52
        %54:vec4<f32> = construct %42, %46, %50, %53
        store %x_GLF_color, %54
        exit_if  # if_1
      }
      $B4: {  # false
        %55:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %56:i32 = load %55
        %57:f32 = convert %56
        %58:vec4<f32> = construct %57
        store %x_GLF_color, %58
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %60:void = call %main_1
    %61:vec4<f32> = load %x_GLF_color
    %62:main_out = construct %61
    ret %62
  }
}
%tint_div_u32 = func(%lhs:u32, %rhs:u32):u32 {
  $B6: {
    %65:bool = eq %rhs, 0u
    %66:u32 = select %rhs, 1u, %65
    %67:u32 = div %lhs, %66
    ret %67
  }
}

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