SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %v:ptr<function, vec4<f32>, read_write> = var
    %7:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %x_39:u32 = load %7
    %9:ptr<uniform, u32, read> = access %x_6, 0u, 0i, 0u
    %x_41:u32 = load %9
    %11:u32 = select %x_41, 92382u, true
    %12:u32 = div %x_39, %11
    %13:vec4<f32> = unpack4x8unorm %12
    store %v, %13
    %x_45:vec4<f32> = load %v
    %15:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_47:i32 = load %15
    %17:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_50:i32 = load %17
    %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %x_53:i32 = load %19
    %21:ptr<uniform, f32, read> = access %x_10, 0u, 1i, 0u
    %x_56:f32 = load %21
    %23:ptr<uniform, f32, read> = access %x_10, 0u, 2i, 0u
    %x_58:f32 = load %23
    %25:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %x_63:f32 = load %25
    %27:f32 = convert %x_47
    %28:f32 = convert %x_50
    %29:f32 = convert %x_53
    %30:f32 = div %x_56, %x_58
    %31:vec4<f32> = construct %27, %28, %29, %30
    %32:f32 = distance %x_45, %31
    %33:bool = lt %32, %x_63
    if %33 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %x_69:i32 = load %34
        %36:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_72:i32 = load %36
        %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_75:i32 = load %38
        %40:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %x_78:i32 = load %40
        %42:f32 = convert %x_69
        %43:f32 = convert %x_72
        %44:f32 = convert %x_75
        %45:f32 = convert %x_78
        %46:vec4<f32> = construct %42, %43, %44, %45
        store %x_GLF_color, %46
        exit_if  # if_1
      }
      %b4 = block {  # false
        %47:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %x_82:i32 = load %47
        %x_83:f32 = convert %x_82
        %50:vec4<f32> = construct %x_83, %x_83, %x_83, %x_83
        store %x_GLF_color, %50
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %52:void = call %main_1
    %53:vec4<f32> = load %x_GLF_color
    %54:main_out = construct %53
    ret %54
  }
}

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