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
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %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: {
    %f:ptr<function, f32, read_write> = var
    %7:f32 = load_vector_element %gl_FragCoord, 1u
    %x_35:f32 = let %7
    %9:ptr<uniform, f32, read> = access %x_7, 0u, 1i, 0u
    %10:f32 = load %9
    %x_37:f32 = let %10
    %12:bool = lt %x_35, %x_37
    %13:f32 = select 1.0f, 0.10000000149011611938f, %12
    %14:f32 = trunc %13
    %15:f32 = fract %14
    store %f, %15
    %16:f32 = load %f
    %x_42:f32 = let %16
    %18:ptr<uniform, f32, read> = access %x_7, 0u, 0i, 0u
    %19:f32 = load %18
    %x_44:f32 = let %19
    %21:bool = eq %x_42, %x_44
    if %21 [t: $B3, f: $B4] {  # if_1
      $B3: {  # true
        %22:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %23:i32 = load %22
        %x_50:i32 = let %23
        %25:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %26:i32 = load %25
        %x_53:i32 = let %26
        %28:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %29:i32 = load %28
        %x_56:i32 = let %29
        %31:ptr<uniform, i32, read> = access %x_9, 0u, 0i, 0u
        %32:i32 = load %31
        %x_59:i32 = let %32
        %34:f32 = convert %x_50
        %35:f32 = let %34
        %36:f32 = convert %x_53
        %37:f32 = let %36
        %38:f32 = convert %x_56
        %39:f32 = let %38
        %40:f32 = convert %x_59
        %41:vec4<f32> = construct %35, %37, %39, %40
        store %x_GLF_color, %41
        exit_if  # if_1
      }
      $B4: {  # false
        %42:ptr<uniform, i32, read> = access %x_9, 0u, 1i, 0u
        %43:i32 = load %42
        %x_63:i32 = let %43
        %45:f32 = convert %x_63
        %x_64:f32 = let %45
        %47:vec4<f32> = construct %x_64, %x_64, %x_64, %x_64
        store %x_GLF_color, %47
        exit_if  # if_1
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B5: {
    store %gl_FragCoord, %gl_FragCoord_param
    %50:void = call %main_1
    %51:vec4<f32> = load %x_GLF_color
    %52:main_out = construct %51
    ret %52
  }
}

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