SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 256i
    %x_65:f32 = load_vector_element %gl_FragCoord, 1u
    %9:ptr<uniform, f32, read> = access %x_8, 0u, 0i, 0u
    %x_67:f32 = load %9
    %11:bool = gt %x_65, %x_67
    if %11 [t: %b3] {  # if_1
      %b3 = block {  # true
        %x_71:i32 = load %a
        %13:i32 = add %x_71, 1i
        store %a, %13
        exit_if  # if_1
      }
    }
    %x_73:i32 = load %a
    %15:i32 = countOneBits %x_73
    store %i, %15
    %x_75:i32 = load %i
    %17:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
    %x_77:i32 = load %17
    %19:bool = lt %x_75, %x_77
    if %19 [t: %b4] {  # if_2
      %b4 = block {  # true
        %20:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %x_82:i32 = load %20
        ret %x_82
      }
    }
    %x_83:i32 = load %i
    ret %x_83
  }
}
%main_1 = func():void -> %b5 {
  %b5 = block {
    %a_1:ptr<function, i32, read_write> = var
    %x_38:i32 = call %f1_
    store %a_1, %x_38
    %x_39:i32 = load %a_1
    %27:ptr<uniform, i32, read> = access %x_11, 0u, 2i, 0u
    %x_41:i32 = load %27
    %29:bool = eq %x_39, %x_41
    if %29 [t: %b6, f: %b7] {  # if_3
      %b6 = block {  # true
        %30:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %x_47:i32 = load %30
        %32:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %x_50:i32 = load %32
        %34:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %x_53:i32 = load %34
        %36:ptr<uniform, i32, read> = access %x_11, 0u, 0i, 0u
        %x_56:i32 = load %36
        %38:f32 = convert %x_47
        %39:f32 = convert %x_50
        %40:f32 = convert %x_53
        %41:f32 = convert %x_56
        %42:vec4<f32> = construct %38, %39, %40, %41
        store %x_GLF_color, %42
        exit_if  # if_3
      }
      %b7 = block {  # false
        %43:ptr<uniform, i32, read> = access %x_11, 0u, 1i, 0u
        %x_60:i32 = load %43
        %x_61:f32 = convert %x_60
        %46:vec4<f32> = construct %x_61, %x_61, %x_61, %x_61
        store %x_GLF_color, %46
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b8 {
  %b8 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %49:void = call %main_1
    %50:vec4<f32> = load %x_GLF_color
    %51:main_out = construct %50
    ret %51
  }
}

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