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

%f1_ = func():i32 {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 256i
    %8:f32 = load_vector_element %gl_FragCoord, 1u
    %x_65:f32 = let %8
    %10:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %11:f32 = load %10
    %x_67:f32 = let %11
    %13:bool = gt %x_65, %x_67
    if %13 [t: $B3] {  # if_1
      $B3: {  # true
        %14:i32 = load %a
        %x_71:i32 = let %14
        %16:i32 = add %x_71, 1i
        store %a, %16
        exit_if  # if_1
      }
    }
    %17:i32 = load %a
    %x_73:i32 = let %17
    %19:i32 = countOneBits %x_73
    store %i, %19
    %20:i32 = load %i
    %x_75:i32 = let %20
    %22:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
    %23:i32 = load %22
    %x_77:i32 = let %23
    %25:bool = lt %x_75, %x_77
    if %25 [t: $B4] {  # if_2
      $B4: {  # true
        %26:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %27:i32 = load %26
        %x_82:i32 = let %27
        ret %x_82
      }
    }
    %29:i32 = load %i
    %x_83:i32 = let %29
    ret %x_83
  }
}
%main_1 = func():void {
  $B5: {
    %a_1:ptr<function, i32, read_write> = var
    %33:i32 = call %f1_
    %x_38:i32 = let %33
    store %a_1, %x_38
    %35:i32 = load %a_1
    %x_39:i32 = let %35
    %37:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
    %38:i32 = load %37
    %x_41:i32 = let %38
    %40:bool = eq %x_39, %x_41
    if %40 [t: $B6, f: $B7] {  # if_3
      $B6: {  # true
        %41:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %42:i32 = load %41
        %x_47:i32 = let %42
        %44:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %45:i32 = load %44
        %x_50:i32 = let %45
        %47:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %48:i32 = load %47
        %x_53:i32 = let %48
        %50:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %51:i32 = load %50
        %x_56:i32 = let %51
        %53:f32 = convert %x_47
        %54:f32 = let %53
        %55:f32 = convert %x_50
        %56:f32 = let %55
        %57:f32 = convert %x_53
        %58:f32 = let %57
        %59:f32 = convert %x_56
        %60:vec4<f32> = construct %54, %56, %58, %59
        store %x_GLF_color, %60
        exit_if  # if_3
      }
      $B7: {  # false
        %61:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %62:i32 = load %61
        %x_60:i32 = let %62
        %64:f32 = convert %x_60
        %x_61:f32 = let %64
        %66:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
        store %x_GLF_color, %66
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B8: {
    store %gl_FragCoord, %gl_FragCoord_param
    %69:void = call %main_1
    %70:vec4<f32> = load %x_GLF_color
    %71:main_out = construct %70
    ret %71
  }
}

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