SKIP: FAILED

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

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

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

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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, f32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    store %a, 1.0f
    %7:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %8:f32 = load %7
    %x_33:f32 = let %8
    %10:f32 = load %a
    %x_34:f32 = let %10
    %12:f32 = select 0.0f, %x_34, false
    %13:f32 = clamp %x_33, %12, 1.0f
    store %b, %13
    %14:f32 = load %b
    %x_37:f32 = let %14
    %16:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %17:f32 = load %16
    %x_39:f32 = let %17
    %19:bool = eq %x_37, %x_39
    if %19 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %20:f32 = load %b
        %x_44:f32 = let %20
        %22:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
        %23:f32 = load %22
        %x_46:f32 = let %23
        %25:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %26:i32 = load %25
        %x_49:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %29:i32 = load %28
        %x_52:i32 = let %29
        %31:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %32:i32 = load %31
        %x_55:i32 = let %32
        %34:f32 = mul %x_44, %x_46
        %35:f32 = convert %x_49
        %36:f32 = let %35
        %37:f32 = convert %x_52
        %38:f32 = let %37
        %39:f32 = convert %x_55
        %40:vec4<f32> = construct %34, %36, %38, %39
        store %x_GLF_color, %40
        exit_if  # if_1
      }
      $B4: {  # false
        %41:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %42:i32 = load %41
        %x_59:i32 = let %42
        %44:f32 = convert %x_59
        %x_60:f32 = let %44
        %46:vec4<f32> = construct %x_60, %x_60, %x_60, %x_60
        store %x_GLF_color, %46
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B5: {
    %48:void = call %main_1
    %49:vec4<f32> = load %x_GLF_color
    %50:main_out = construct %49
    ret %50
  }
}

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