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, 1> @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: {
    %v:ptr<function, vec4<f32>, read_write> = var
    %6:ptr<uniform, f32, read> = access %x_6, 0u, 0i, 0u
    %7:f32 = load %6
    %x_33:f32 = let %7
    %9:vec4<f32> = construct %x_33, %x_33, %x_33, %x_33
    %10:vec4<f32> = clamp vec4<f32>(1.54308068752288818359f), %9, vec4<f32>(1.0f)
    store %v, %10
    %11:f32 = load_vector_element %v, 0u
    %x_38:f32 = let %11
    %13:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %14:i32 = load %13
    %x_40:i32 = let %14
    %16:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %17:i32 = load %16
    %x_43:i32 = let %17
    %19:f32 = load_vector_element %v, 2u
    %x_46:f32 = let %19
    %21:f32 = convert %x_40
    %22:f32 = let %21
    %23:f32 = convert %x_43
    %24:vec4<f32> = construct %x_38, %22, %23, %x_46
    store %x_GLF_color, %24
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B3: {
    %26:void = call %main_1
    %27:vec4<f32> = load %x_GLF_color
    %28:main_out = construct %27
    ret %28
  }
}

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