SKIP: FAILED

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

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

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

buf1 = struct @align(4) {
  x_GLF_uniform_float_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_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: {
    %f:ptr<function, f32, read_write> = var
    %x_48:ptr<function, bool, read_write> = var
    %x_49_phi:ptr<function, bool, read_write> = var
    store %f, 1626.509033203125f
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %x_35:i32 = let %9
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %12:i32 = load %11
    %x_37:i32 = let %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_39:i32 = let %15
    %17:i32 = add %x_37, %x_39
    %18:bool = eq %x_35, %17
    %x_41:bool = let %18
    store %x_49_phi, %x_41
    %20:bool = eq %x_41, false
    if %20 [t: $B3] {  # if_1
      $B3: {  # true
        %21:f32 = load %f
        %x_45:f32 = let %21
        %23:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
        %24:f32 = load %23
        %x_47:f32 = let %24
        %26:bool = gt %x_45, %x_47
        store %x_48, %26
        %27:bool = load %x_48
        store %x_49_phi, %27
        exit_if  # if_1
      }
    }
    %28:bool = load %x_49_phi
    %x_49:bool = let %28
    if %x_49 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %30:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %31:i32 = load %30
        %x_54:i32 = let %31
        %33:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %34:i32 = load %33
        %x_57:i32 = let %34
        %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %37:i32 = load %36
        %x_60:i32 = let %37
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %40:i32 = load %39
        %x_63:i32 = let %40
        %42:f32 = convert %x_54
        %43:f32 = let %42
        %44:f32 = convert %x_57
        %45:f32 = let %44
        %46:f32 = convert %x_60
        %47:f32 = let %46
        %48:f32 = convert %x_63
        %49:vec4<f32> = construct %43, %45, %47, %48
        store %x_GLF_color, %49
        exit_if  # if_2
      }
      $B5: {  # false
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %51:i32 = load %50
        %x_67:i32 = let %51
        %53:f32 = convert %x_67
        %x_68:f32 = let %53
        %55:vec4<f32> = construct %x_68, %x_68, %x_68, %x_68
        store %x_GLF_color, %55
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B6: {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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