SKIP: FAILED

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

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

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

buf0 = struct @align(4) {
  x_GLF_uniform_float_values:array<strided_arr_1, 1> @offset(0)
}

strided_arr_2 = struct @align(4) {
  el:u32 @offset(0)
}

buf1 = struct @align(4) {
  x_GLF_uniform_uint_values:array<strided_arr_2, 1> @offset(0)
}

main_out = struct @align(16) {
  x_GLF_color_1:vec4<f32> @offset(0), @location(0)
}

$B1: {  # root
  %x_8:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_10:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_12:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, u32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    store %a, 0u
    %9:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %10:i32 = load %9
    %x_41:i32 = let %10
    store %b, %x_41
    %12:f32 = load_vector_element %gl_FragCoord, 0u
    %x_43:f32 = let %12
    %14:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %15:f32 = load %14
    %x_45:f32 = let %15
    %17:bool = lt %x_43, %x_45
    if %17 [t: $B3] {  # if_1
      $B3: {  # true
        %18:ptr<uniform, u32, read> = access %x_12, 0u, 0i, 0u
        %19:u32 = load %18
        %x_50:u32 = let %19
        %21:u32 = load %a
        %x_51:u32 = let %21
        %23:u32 = call %tint_mod_u32, %x_50, %x_51
        %25:i32 = bitcast %23
        store %b, %25
        exit_if  # if_1
      }
    }
    %26:i32 = load %b
    %x_54:i32 = let %26
    %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %29:i32 = load %28
    %x_56:i32 = let %29
    %31:bool = eq %x_54, %x_56
    if %31 [t: $B4, f: $B5] {  # if_2
      $B4: {  # true
        %32:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %33:i32 = load %32
        %x_62:i32 = let %33
        %35:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %36:i32 = load %35
        %x_65:i32 = let %36
        %38:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %39:i32 = load %38
        %x_68:i32 = let %39
        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %42:i32 = load %41
        %x_71:i32 = let %42
        %44:f32 = convert %x_62
        %45:f32 = let %44
        %46:f32 = convert %x_65
        %47:f32 = let %46
        %48:f32 = convert %x_68
        %49:f32 = let %48
        %50:f32 = convert %x_71
        %51:vec4<f32> = construct %45, %47, %49, %50
        store %x_GLF_color, %51
        exit_if  # if_2
      }
      $B5: {  # false
        %52:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %53:i32 = load %52
        %x_75:i32 = let %53
        %55:f32 = convert %x_75
        %x_76:f32 = let %55
        %57:vec4<f32> = construct %x_76, %x_76, %x_76, %x_76
        store %x_GLF_color, %57
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B6: {
    store %gl_FragCoord, %gl_FragCoord_param
    %60:void = call %main_1
    %61:vec4<f32> = load %x_GLF_color
    %62:main_out = construct %61
    ret %62
  }
}
%tint_mod_u32 = func(%lhs:u32, %rhs:u32):u32 {
  $B7: {
    %65:bool = eq %rhs, 0u
    %66:u32 = select %rhs, 1u, %65
    %67:u32 = let %66
    %68:u32 = div %lhs, %67
    %69:u32 = mul %68, %67
    %70:u32 = sub %lhs, %69
    ret %70
  }
}

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