SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    %GLF_dead6index:ptr<function, i32, read_write> = var
    %GLF_dead6currentNode:ptr<function, i32, read_write> = var
    %donor_replacementGLF_dead6tree:ptr<function, array<i32, 1>, read_write> = var
    store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
    store %GLF_dead6index, 0i
    %7:ptr<uniform, vec2<f32>, read> = access %x_6, 0u
    %8:f32 = load_vector_element %7, 1u
    %x_34:f32 = let %8
    %10:bool = lt %x_34, 0.0f
    if %10 [t: $B3] {  # if_1
      $B3: {  # true
        loop [b: $B4, c: $B5] {  # loop_1
          $B4: {  # body
            if true [t: $B6, f: $B7] {  # if_2
              $B6: {  # true
                exit_if  # if_2
              }
              $B7: {  # false
                exit_loop  # loop_1
              }
            }
            %11:i32 = load %GLF_dead6index
            %x_9:i32 = let %11
            %13:ptr<function, i32, read_write> = access %donor_replacementGLF_dead6tree, %x_9
            %14:i32 = load %13
            %x_10:i32 = let %14
            store %GLF_dead6currentNode, %x_10
            %16:i32 = load %GLF_dead6currentNode
            %x_11:i32 = let %16
            store %GLF_dead6index, %x_11
            continue  # -> $B5
          }
          $B5: {  # continuing
            next_iteration  # -> $B4
          }
        }
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B8: {
    %19:void = call %main_1
    %20:vec4<f32> = load %x_GLF_color
    %21:main_out = construct %20
    ret %21
  }
}

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