SKIP: FAILED

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

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

buf0 = struct @align(4) {
  x_GLF_uniform_float_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)
}

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %x_32:ptr<function, i32, read_write> = var
    %8:ptr<uniform, f32, read> = access %x_6, 0u
    %9:f32 = load %8
    %x_34:f32 = let %9
    %11:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %12:f32 = load %11
    %x_36:f32 = let %12
    %14:bool = lt %x_34, %x_36
    if %14 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %15:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %16:i32 = load %15
        %x_42:i32 = let %16
        store %x_32, %x_42
        exit_if  # if_1
      }
      $B4: {  # false
        %18:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %19:i32 = load %18
        %x_44:i32 = let %19
        store %x_32, %x_44
        exit_if  # if_1
      }
    }
    %21:i32 = load %x_32
    %x_45:i32 = let %21
    %23:i32 = or %x_45, 1i
    %24:i32 = complement %23
    store %a, %24
    %25:i32 = load %a
    %x_48:i32 = let %25
    %27:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
    %28:i32 = load %27
    %x_50:i32 = let %28
    %30:i32 = complement %x_50
    %31:bool = eq %x_48, %30
    if %31 [t: $B5, f: $B6] {  # if_2
      $B5: {  # true
        %32:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %33:i32 = load %32
        %x_57:i32 = let %33
        %35:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %36:i32 = load %35
        %x_60:i32 = let %36
        %38:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %39:i32 = load %38
        %x_63:i32 = let %39
        %41:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %42:i32 = load %41
        %x_66:i32 = let %42
        %44:f32 = convert %x_57
        %45:f32 = let %44
        %46:f32 = convert %x_60
        %47:f32 = let %46
        %48:f32 = convert %x_63
        %49:f32 = let %48
        %50:f32 = convert %x_66
        %51:vec4<f32> = construct %45, %47, %49, %50
        store %x_GLF_color, %51
        exit_if  # if_2
      }
      $B6: {  # false
        %52:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %53:i32 = load %52
        %x_70:i32 = let %53
        %55:f32 = convert %x_70
        %x_71:f32 = let %55
        %57:vec4<f32> = construct %x_71, %x_71, %x_71, %x_71
        store %x_GLF_color, %57
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B7: {
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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