SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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)
}

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

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

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %7:f32 = load %6
    %x_30:f32 = let %7
    %9:f32 = div %x_30, 1.0f
    %10:f32 = floor %9
    %11:f32 = mul 1.0f, %10
    %12:f32 = sub %x_30, %11
    store %a, %12
    %13:f32 = load %a
    %x_32:f32 = let %13
    %15:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %16:f32 = load %15
    %x_34:f32 = let %16
    %18:bool = eq %x_32, %x_34
    if %18 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %19:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %20:i32 = load %19
        %x_40:i32 = let %20
        %22:f32 = load %a
        %x_42:f32 = let %22
        %24:f32 = load %a
        %x_43:f32 = let %24
        %26:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %27:i32 = load %26
        %x_45:i32 = let %27
        %29:f32 = convert %x_40
        %30:f32 = let %29
        %31:f32 = convert %x_45
        %32:vec4<f32> = construct %30, %x_42, %x_43, %31
        store %x_GLF_color, %32
        exit_if  # if_1
      }
      $B4: {  # false
        %33:f32 = load %a
        %x_48:f32 = let %33
        %35:vec4<f32> = construct %x_48, %x_48, %x_48, %x_48
        store %x_GLF_color, %35
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %37:void = call %main_1
    %38:vec4<f32> = load %x_GLF_color
    %39:main_out = construct %38
    ret %39
  }
}

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