SKIP: FAILED

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

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

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

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

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

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

%main_1 = func():void {
  $B2: {
    %numbers:ptr<function, array<i32, 3>, read_write> = var
    %a:ptr<function, vec2<f32>, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %x_38:i32 = let %9
    %11:ptr<function, i32, read_write> = access %numbers, %x_38
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %13:i32 = load %12
    store %11, %13
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_43:i32 = let %15
    %17:ptr<function, i32, read_write> = access %numbers, %x_43
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %19:i32 = load %18
    store %17, %19
    %20:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %21:i32 = load %20
    %x_48:i32 = let %21
    %23:ptr<function, i32, read_write> = access %numbers, %x_48
    %24:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
    %25:i32 = load %24
    store %23, %25
    %26:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %27:i32 = load %26
    %28:f32 = convert %27
    %29:f32 = let %28
    %30:ptr<uniform, f32, read> = access %x_9, 0u, 2i, 0u
    %31:f32 = load %30
    %32:bool = lt 0.0f, %31
    %33:i32 = select 2i, 1i, %32
    %34:ptr<function, i32, read_write> = access %numbers, %33
    %35:i32 = load %34
    %36:f32 = convert %35
    %37:vec2<f32> = construct %29, %36
    store %a, %37
    %38:vec2<f32> = load %a
    %39:vec2<f32> = let %38
    %40:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %41:f32 = load %40
    %42:ptr<uniform, f32, read> = access %x_9, 0u, 1i, 0u
    %43:f32 = load %42
    %44:vec2<f32> = construct %41, %43
    %45:f32 = dot %39, %44
    store %b, %45
    %46:f32 = load %b
    %47:ptr<uniform, f32, read> = access %x_9, 0u, 0i, 0u
    %48:f32 = load %47
    %49:bool = eq %46, %48
    if %49 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %51:i32 = load %50
        %52:f32 = convert %51
        %53:f32 = let %52
        %54:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %55:i32 = load %54
        %56:f32 = convert %55
        %57:f32 = let %56
        %58:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %59:i32 = load %58
        %60:f32 = convert %59
        %61:f32 = let %60
        %62:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %63:i32 = load %62
        %64:f32 = convert %63
        %65:vec4<f32> = construct %53, %57, %61, %64
        store %x_GLF_color, %65
        exit_if  # if_1
      }
      $B4: {  # false
        %66:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %67:i32 = load %66
        %68:f32 = convert %67
        %69:vec4<f32> = construct %68
        store %x_GLF_color, %69
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %71:void = call %main_1
    %72:vec4<f32> = load %x_GLF_color
    %73:main_out = construct %72
    ret %73
  }
}

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