SKIP: FAILED

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

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, array<i32, 3>, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %7:ptr<function, i32, read_write> = access %a, 0i
    store %7, 1i
    %8:ptr<function, i32, read_write> = access %a, 1i
    store %8, 2i
    %9:ptr<function, i32, read_write> = access %a, 2i
    store %9, 3i
    store %b, 0i
    %10:ptr<uniform, i32, read> = access %x_8, 0u
    %11:i32 = load %10
    %x_38:i32 = let %11
    %13:ptr<function, i32, read_write> = access %a, %x_38
    %14:i32 = load %13
    %x_40:i32 = let %14
    store %c, %x_40
    %16:i32 = load %c
    %x_41:i32 = let %16
    %18:bool = gt %x_41, 1i
    if %18 [t: $B3] {  # if_1
      $B3: {  # true
        store %x_GLF_color, vec4<f32>(0.0f, 1.0f, 1.0f, 0.0f)
        %19:i32 = load %b
        %x_45:i32 = let %19
        %21:i32 = add %x_45, 1i
        store %b, %21
        exit_if  # if_1
      }
    }
    %22:i32 = load %b
    %x_47:i32 = let %22
    %24:i32 = add %x_47, 1i
    %x_48:i32 = let %24
    store %b, %x_48
    %26:i32 = max %x_48, 0i
    %27:i32 = min %26, 2i
    %x_50_save:i32 = let %27
    %29:ptr<function, i32, read_write> = access %a, %x_50_save
    %30:i32 = load %29
    %x_51:i32 = let %30
    %32:ptr<function, i32, read_write> = access %a, %x_50_save
    %33:i32 = add %x_51, 1i
    store %32, %33
    %34:ptr<function, i32, read_write> = access %a, 2i
    %35:i32 = load %34
    %x_54:i32 = let %35
    %37:bool = eq %x_54, 4i
    if %37 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      $B5: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %39:void = call %main_1
    %40:vec4<f32> = load %x_GLF_color
    %41:main_out = construct %40
    ret %41
  }
}

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