SKIP: FAILED

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 3> @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 = block {  # root
  %x_7:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void -> %b2 {
  %b2 = block {
    %arr:ptr<function, array<i32, 3>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %c:ptr<function, i32, read_write> = var
    %10:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %11:i32 = load %10
    %12:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %13:i32 = load %12
    %14:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %15:i32 = load %14
    %16:array<i32, 3> = construct %11, %13, %15
    store %arr, %16
    %17:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %18:i32 = load %17
    %19:ptr<function, i32, read_write> = access %arr, %18
    %20:i32 = load %19
    store %a, %20
    %21:i32 = load %a
    %22:i32 = sub %21, 1i
    store %b, %22
    %23:f32 = load_vector_element %gl_FragCoord, 0u
    %24:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
    %25:f32 = load %24
    %26:bool = lt %23, %25
    if %26 [t: %b3] {  # if_1
      %b3 = block {  # true
        %27:i32 = load %b
        %28:i32 = add %27, 1i
        store %b, %28
        exit_if  # if_1
      }
    }
    %29:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %30:i32 = load %29
    store %c, %30
    %x_63:i32 = load %c
    %32:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %x_65:i32 = load %32
    %34:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %x_67:i32 = load %34
    %36:i32 = clamp %x_63, %x_65, %x_67
    %37:ptr<function, i32, read_write> = access %arr, %36
    %38:i32 = load %b
    store %37, %38
    %39:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %40:i32 = load %39
    %41:ptr<function, i32, read_write> = access %arr, %40
    %42:i32 = load %41
    %43:f32 = convert %42
    %44:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %45:i32 = load %44
    %46:ptr<function, i32, read_write> = access %arr, %45
    %47:i32 = load %46
    %48:f32 = convert %47
    %49:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %50:i32 = load %49
    %51:ptr<function, i32, read_write> = access %arr, %50
    %52:i32 = load %51
    %53:f32 = convert %52
    %54:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %55:i32 = load %54
    %56:ptr<function, i32, read_write> = access %arr, %55
    %57:i32 = load %56
    %58:f32 = convert %57
    %59:vec4<f32> = construct %43, %48, %53, %58
    store %x_GLF_color, %59
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b4 {
  %b4 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %62:void = call %main_1
    %63:vec4<f32> = load %x_GLF_color
    %64:main_out = construct %63
    ret %64
  }
}

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