SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: buf0 = struct @align(4) {
  zero:i32 @offset(0)
}

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %x_9:ptr<function, array<i32, 1>, read_write> = var
    %x_10_phi:ptr<function, i32, read_write> = var
    %x_33:array<i32, 1> = load %x_9
    %x_6:i32 = access %x_33, 0u
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        store %x_GLF_color, vec4<f32>(0.0f)
        %8:ptr<uniform, i32, read> = access %x_5, 0u
        %x_7:i32 = load %8
        %10:ptr<function, i32, read_write> = access %x_9, %x_7
        %x_8:i32 = load %10
        %12:bool = eq %x_8, %x_6
        if %12 [t: %b5] {  # if_1
          %b5 = block {  # true
            store %x_10_phi, 1i
            exit_loop  # loop_1
          }
        }
        store %x_10_phi, 2i
        exit_loop  # loop_1
      }
      %b4 = block {  # continuing
        next_iteration %b3
      }
    }
    %x_10:i32 = load %x_10_phi
    %14:bool = eq %x_10, 1i
    %15:bool = eq %x_10, 2i
    %16:bool = or %14, %15
    if %16 [t: %b6, f: %b7] {  # if_2
      %b6 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      %b7 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b8 {
  %b8 = block {
    %18:void = call %main_1
    %19:vec4<f32> = load %x_GLF_color
    %20:main_out = construct %19
    ret %20
  }
}

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