SKIP: FAILED

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr, 3> @offset(0)
}

buf2 = struct @align(8) {
  resolution:vec2<f32> @offset(0)
}

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

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

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

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

%main_1 = func():void {
  $B2: {
    %f:ptr<function, f32, read_write> = var
    %7:ptr<uniform, f32, read> = access %x_6, 0u, 1i, 0u
    %8:f32 = load %7
    %9:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
    %10:f32 = load_vector_element %9, 0u
    %11:f32 = mul %8, %10
    %12:f32 = let %11
    %13:ptr<uniform, f32, read> = access %x_6, 0u, 2i, 0u
    %14:f32 = load %13
    %15:f32 = let %14
    %16:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
    %17:f32 = load_vector_element %16, 0u
    %18:f32 = round %17
    %19:f32 = mul %15, %18
    %20:f32 = add %12, %19
    %21:ptr<uniform, vec2<f32>, read> = access %x_8, 0u
    %22:f32 = load_vector_element %21, 1u
    %23:f32 = add %20, %22
    store %f, %23
    %24:f32 = load %f
    %25:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %26:f32 = load %25
    %27:bool = eq %24, %26
    if %27 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %28:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %29:i32 = load %28
        %30:f32 = convert %29
        %31:f32 = let %30
        %32:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %33:i32 = load %32
        %34:f32 = convert %33
        %35:f32 = let %34
        %36:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %37:i32 = load %36
        %38:f32 = convert %37
        %39:f32 = let %38
        %40:ptr<uniform, i32, read> = access %x_10, 0u, 0i, 0u
        %41:i32 = load %40
        %42:f32 = convert %41
        %43:vec4<f32> = construct %31, %35, %39, %42
        store %x_GLF_color, %43
        exit_if  # if_1
      }
      $B4: {  # false
        %44:ptr<uniform, i32, read> = access %x_10, 0u, 1i, 0u
        %45:i32 = load %44
        %46:f32 = convert %45
        %47:vec4<f32> = construct %46
        store %x_GLF_color, %47
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %49:void = call %main_1
    %50:vec4<f32> = load %x_GLF_color
    %51:main_out = construct %50
    ret %51
  }
}

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