SKIP: FAILED

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

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

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

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

%main_1 = func():void -> %b2 {
  %b2 = block {
    %4:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
    %x_23:f32 = load %4
    %6:f32 = inverseSqrt %x_23
    %7:bool = lt %6, -1.0f
    if %7 [t: %b3, f: %b4] {  # if_1
      %b3 = block {  # true
        %8:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_30:f32 = load %8
        %10:vec4<f32> = construct %x_30, %x_30, %x_30, %x_30
        store %x_GLF_color, %10
        exit_if  # if_1
      }
      %b4 = block {  # false
        %11:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
        %x_33:f32 = load %11
        %13:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_35:f32 = load %13
        %15:ptr<uniform, f32, read> = access %x_5, 0u, 0i, 0u
        %x_37:f32 = load %15
        %17:ptr<uniform, f32, read> = access %x_5, 0u, 1i, 0u
        %x_39:f32 = load %17
        %19:vec4<f32> = construct %x_33, %x_35, %x_37, %x_39
        store %x_GLF_color, %19
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b5 {
  %b5 = block {
    %21:void = call %main_1
    %22:vec4<f32> = load %x_GLF_color
    %23:main_out = construct %22
    ret %23
  }
}

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