SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:469 internal compiler error: %b1 = block {  # root
  %arg_0:ptr<handle, texture_2d_array<f32>, read> = var @binding_point(1, 0)
  %prevent_dce:ptr<storage, vec4<f32>, read_write> = var @binding_point(2, 0)
}

%textureLoad_46a93f = func():void -> %b2 {
  %b2 = block {
    %arg_1:ptr<function, vec2<u32>, read_write> = var, vec2<u32>(1u)
    %arg_2:ptr<function, i32, read_write> = var, 1i
    %arg_3:ptr<function, u32, read_write> = var, 1u
    %7:texture_2d_array<f32> = load %arg_0
    %8:vec2<u32> = load %arg_1
    %9:i32 = load %arg_2
    %10:u32 = load %arg_3
    %11:vec4<f32> = textureLoad %7, %8, %9, %10
    %res:ptr<function, vec4<f32>, read_write> = var, %11
    %13:vec4<f32> = load %res
    store %prevent_dce, %13
    ret
  }
}
%vertex_main = @vertex func():vec4<f32> [@position] -> %b3 {
  %b3 = block {
    %15:void = call %textureLoad_46a93f
    ret vec4<f32>(0.0f)
  }
}
%fragment_main = @fragment func():void -> %b4 {
  %b4 = block {
    %17:void = call %textureLoad_46a93f
    ret
  }
}
%compute_main = @compute @workgroup_size(1, 1, 1) func():void -> %b5 {
  %b5 = block {
    %19:void = call %textureLoad_46a93f
    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.  *
********************************************************************
