SKIP: FAILED

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

buf1 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 3> @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)
}

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

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

%f1_ = func():i32 -> %b2 {
  %b2 = block {
    %i:ptr<function, i32, read_write> = var
    %A:ptr<function, array<i32, 10>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %10:i32 = load %9
    store %i, %10
    loop [b: %b3, c: %b4] {  # loop_1
      %b3 = block {  # body
        %11:i32 = load %i
        %12:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
        %13:i32 = load %12
        %14:bool = lt %11, %13
        if %14 [t: %b5, f: %b6] {  # if_1
          %b5 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # false
            exit_loop  # loop_1
          }
        }
        %x_66:i32 = load %i
        %16:ptr<function, i32, read_write> = access %A, %x_66
        %17:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %18:i32 = load %17
        store %16, %18
        continue %b4
      }
      %b4 = block {  # continuing
        %19:i32 = load %i
        %20:i32 = add %19, 1i
        store %i, %20
        next_iteration %b3
      }
    }
    store %a, -1i
    %21:f32 = load_vector_element %gl_FragCoord, 1u
    %22:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
    %23:f32 = load %22
    %24:bool = gte %21, %23
    if %24 [t: %b7] {  # if_2
      %b7 = block {  # true
        %25:i32 = load %a
        %x_80:i32 = add %25, 1i
        store %a, %x_80
        %27:ptr<function, i32, read_write> = access %A, %x_80
        %28:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %29:i32 = load %28
        store %27, %29
        exit_if  # if_2
      }
    }
    %30:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %31:i32 = load %30
    %32:ptr<function, i32, read_write> = access %A, %31
    %33:i32 = load %32
    %34:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %35:i32 = load %34
    %36:bool = eq %33, %35
    if %36 [t: %b8, f: %b9] {  # if_3
      %b8 = block {  # true
        %37:i32 = load %a
        %x_95:i32 = add %37, 1i
        store %a, %x_95
        %39:ptr<function, i32, read_write> = access %A, %x_95
        %x_97:i32 = load %39
        ret %x_97
      }
      %b9 = block {  # false
        %41:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %x_99:i32 = load %41
        ret %x_99
      }
    }
    unreachable
  }
}
%main_1 = func():void -> %b10 {
  %b10 = block {
    %i_1:ptr<function, i32, read_write> = var
    %x_42:i32 = call %f1_
    store %i_1, %x_42
    %46:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %47:i32 = load %46
    %48:f32 = convert %47
    %49:i32 = load %i_1
    %50:f32 = convert %49
    %51:i32 = load %i_1
    %52:f32 = convert %51
    %53:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %54:i32 = load %53
    %55:f32 = convert %54
    %56:vec4<f32> = construct %48, %50, %52, %55
    store %x_GLF_color, %56
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out -> %b11 {
  %b11 = block {
    store %gl_FragCoord, %gl_FragCoord_param
    %59:void = call %main_1
    %60:vec4<f32> = load %x_GLF_color
    %61:main_out = construct %60
    ret %61
  }
}

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