SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 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: {  # 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: {
    %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: {  # 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: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %15:i32 = load %i
        %x_66:i32 = let %15
        %17:ptr<function, i32, read_write> = access %A, %x_66
        %18:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %19:i32 = load %18
        store %17, %19
        continue  # -> $B4
      }
      $B4: {  # continuing
        %20:i32 = load %i
        %21:i32 = add %20, 1i
        store %i, %21
        next_iteration  # -> $B3
      }
    }
    store %a, -1i
    %22:f32 = load_vector_element %gl_FragCoord, 1u
    %23:ptr<uniform, f32, read> = access %x_12, 0u, 0i, 0u
    %24:f32 = load %23
    %25:bool = gte %22, %24
    if %25 [t: $B7] {  # if_2
      $B7: {  # true
        %26:i32 = load %a
        %27:i32 = add %26, 1i
        %x_80:i32 = let %27
        store %a, %x_80
        %29:ptr<function, i32, read_write> = access %A, %x_80
        %30:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %31:i32 = load %30
        store %29, %31
        exit_if  # if_2
      }
    }
    %32:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %33:i32 = load %32
    %34:ptr<function, i32, read_write> = access %A, %33
    %35:i32 = load %34
    %36:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %37:i32 = load %36
    %38:bool = eq %35, %37
    if %38 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %39:i32 = load %a
        %40:i32 = add %39, 1i
        %x_95:i32 = let %40
        store %a, %x_95
        %42:ptr<function, i32, read_write> = access %A, %x_95
        %43:i32 = load %42
        %x_97:i32 = let %43
        ret %x_97
      }
      $B9: {  # false
        %45:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %46:i32 = load %45
        %x_99:i32 = let %46
        ret %x_99
      }
    }
    unreachable
  }
}
%main_1 = func():void {
  $B10: {
    %i_1:ptr<function, i32, read_write> = var
    %50:i32 = call %f1_
    %x_42:i32 = let %50
    store %i_1, %x_42
    %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %53:i32 = load %52
    %54:f32 = convert %53
    %55:f32 = let %54
    %56:i32 = load %i_1
    %57:f32 = convert %56
    %58:f32 = let %57
    %59:i32 = load %i_1
    %60:f32 = convert %59
    %61:f32 = let %60
    %62:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %63:i32 = load %62
    %64:f32 = convert %63
    %65:vec4<f32> = construct %55, %58, %61, %64
    store %x_GLF_color, %65
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B11: {
    store %gl_FragCoord, %gl_FragCoord_param
    %68:void = call %main_1
    %69:vec4<f32> = load %x_GLF_color
    %70:main_out = construct %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.  *
********************************************************************
