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, 2> @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_8:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %v1:ptr<function, vec2<f32>, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %7:f32 = load %6
    %x_35:f32 = let %7
    %9:vec2<f32> = construct %x_35, %x_35
    store %v1, %9
    %10:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %11:i32 = load %10
    %x_38:i32 = let %11
    %13:f32 = load_vector_element %v1, 1u
    %x_40:f32 = let %13
    %15:f32 = ldexp %x_40, -256i
    store_vector_element %v1, %x_38, %15
    %16:vec2<f32> = load %v1
    %x_43:vec2<f32> = let %16
    %18:vec2<f32> = construct %x_35, 0.0f
    %19:vec2<f32> = let %18
    %20:vec2<f32> = construct 0.0f, %x_35
    %21:mat2x2<f32> = construct %19, %20
    %22:vec2<f32> = mul %x_43, %21
    %23:f32 = access %22, 0u
    %24:bool = eq %23, %x_35
    if %24 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %25:f32 = convert %x_38
        %x_53:f32 = let %25
        %27:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %28:i32 = load %27
        %x_55:i32 = let %28
        %30:f32 = convert %x_55
        %x_56:f32 = let %30
        %32:vec4<f32> = construct %x_53, %x_56, %x_56, %x_53
        store %x_GLF_color, %32
        exit_if  # if_1
      }
      $B4: {  # false
        %33:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %34:i32 = load %33
        %x_59:i32 = let %34
        %36:f32 = convert %x_59
        %x_60:f32 = let %36
        %38:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
        store %x_GLF_color, %38
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %40:void = call %main_1
    %41:vec4<f32> = load %x_GLF_color
    %42:main_out = construct %41
    ret %42
  }
}

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