SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
  %prevent_dce:ptr<storage, vec2<i32>, read_write> = var @binding_point(2, 0)
}

%firstTrailingBit_50c072 = func():void {
  $B2: {
    %arg_0:ptr<function, vec2<i32>, read_write> = var, vec2<i32>(1i)
    %4:vec2<i32> = load %arg_0
    %5:vec2<u32> = bitcast %4
    %6:vec2<u32> = let %5
    %7:vec2<u32> = and %6, vec2<u32>(65535u)
    %8:vec2<bool> = eq %7, vec2<u32>(0u)
    %9:vec2<u32> = select vec2<u32>(0u), vec2<u32>(16u), %8
    %10:vec2<u32> = let %9
    %11:vec2<u32> = shr %6, %10
    %12:vec2<u32> = and %11, vec2<u32>(255u)
    %13:vec2<bool> = eq %12, vec2<u32>(0u)
    %14:vec2<u32> = select vec2<u32>(0u), vec2<u32>(8u), %13
    %15:vec2<u32> = let %14
    %16:vec2<u32> = shr %11, %15
    %17:vec2<u32> = and %16, vec2<u32>(15u)
    %18:vec2<bool> = eq %17, vec2<u32>(0u)
    %19:vec2<u32> = select vec2<u32>(0u), vec2<u32>(4u), %18
    %20:vec2<u32> = let %19
    %21:vec2<u32> = shr %16, %20
    %22:vec2<u32> = and %21, vec2<u32>(3u)
    %23:vec2<bool> = eq %22, vec2<u32>(0u)
    %24:vec2<u32> = select vec2<u32>(0u), vec2<u32>(2u), %23
    %25:vec2<u32> = let %24
    %26:vec2<u32> = shr %21, %25
    %27:vec2<u32> = and %26, vec2<u32>(1u)
    %28:vec2<bool> = eq %27, vec2<u32>(0u)
    %29:vec2<u32> = select vec2<u32>(0u), vec2<u32>(1u), %28
    %30:vec2<u32> = or %25, %29
    %31:vec2<u32> = or %20, %30
    %32:vec2<u32> = or %15, %31
    %33:vec2<u32> = or %10, %32
    %34:vec2<bool> = eq %26, vec2<u32>(0u)
    %35:vec2<u32> = select %33, vec2<u32>(4294967295u), %34
    %36:vec2<i32> = bitcast %35
    %res:ptr<function, vec2<i32>, read_write> = var, %36
    %38:vec2<i32> = load %res
    store %prevent_dce, %38
    ret
  }
}
%vertex_main = @vertex func():vec4<f32> [@position] {
  $B3: {
    %40:void = call %firstTrailingBit_50c072
    ret vec4<f32>(0.0f)
  }
}
%fragment_main = @fragment func():void {
  $B4: {
    %42:void = call %firstTrailingBit_50c072
    ret
  }
}
%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
  $B5: {
    %44:void = call %firstTrailingBit_50c072
    ret
  }
}

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