SKIP: FAILED

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

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

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

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

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

%func_ = func():f32 {
  $B2: {
    switch 1i [c: (0i, $B3), c: (default, $B4)] {  # switch_1
      $B3: {  # case
        ret 1.0f
      }
      $B4: {  # case
        exit_switch  # switch_1
      }
    }
    ret 0.0f
  }
}
%main_1 = func():void {
  $B5: {
    %v:ptr<function, vec4<f32>, read_write> = var
    store %v, vec4<f32>(1.0f)
    %8:f32 = load_vector_element %gl_FragCoord, 1u
    %9:bool = lt %8, 0.0f
    if %9 [t: $B6] {  # if_1
      $B6: {  # true
        %10:f32 = call %func_
        %x_42:f32 = let %10
        %12:vec4<f32> = construct %x_42
        store %v, %12
        exit_if  # if_1
      }
    }
    %13:vec4<f32> = load %v
    %14:u32 = pack4x8unorm %13
    %15:bool = eq %14, 1u
    if %15 [t: $B7] {  # if_2
      $B7: {  # true
        ret
      }
    }
    %16:ptr<uniform, u32, read> = access %x_8, 0u
    %17:u32 = load %16
    %18:u32 = and %17, 31u
    %19:u32 = shl 1u, %18
    %20:bool = eq %19, 2u
    if %20 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B9: {  # false
        %21:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %22:i32 = load %21
        %23:f32 = convert %22
        %24:vec4<f32> = construct %23
        store %x_GLF_color, %24
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %27:void = call %main_1
    %28:vec4<f32> = load %x_GLF_color
    %29:main_out = construct %28
    ret %29
  }
}

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