SKIP: FAILED

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

%distance_aa4055 = func():void {
  $B2: {
    %arg_0:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
    %arg_1:ptr<function, vec2<f32>, read_write> = var, vec2<f32>(1.0f)
    %5:vec2<f32> = load %arg_0
    %6:vec2<f32> = load %arg_1
    %7:f32 = distance %5, %6
    %res:ptr<function, f32, read_write> = var, %7
    %9:f32 = load %res
    store %prevent_dce, %9
    ret
  }
}
%vertex_main = @vertex func():vec4<f32> [@position] {
  $B3: {
    %11:void = call %distance_aa4055
    ret vec4<f32>(0.0f)
  }
}
%fragment_main = @fragment func():void {
  $B4: {
    %13:void = call %distance_aa4055
    ret
  }
}
%compute_main = @compute @workgroup_size(1, 1, 1) func():void {
  $B5: {
    %15:void = call %distance_aa4055
    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.  *
********************************************************************
