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_7:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %gl_FragCoord:ptr<private, vec4<f32>, read_write> = var
  %x_11:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%main_1 = func():void {
  $B2: {
    %i:ptr<function, i32, read_write> = var
    %arr:ptr<function, array<i32, 2>, read_write> = var
    %a:ptr<function, i32, read_write> = var
    %9:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 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_7, 0u, 2i, 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_50:i32 = let %15
        %17:ptr<function, i32, read_write> = access %arr, %x_50
        %18:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 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_11, 0u, 0i, 0u
    %24:f32 = load %23
    %25:bool = lt %22, %24
    %26:bool = eq %25, false
    if %26 [t: $B7] {  # if_2
      $B7: {  # true
        %27:i32 = load %a
        %28:i32 = add %27, 1i
        %x_65:i32 = let %28
        store %a, %x_65
        %30:ptr<function, i32, read_write> = access %arr, %x_65
        %31:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %32:i32 = load %31
        store %30, %32
        exit_if  # if_2
      }
    }
    %33:i32 = load %a
    %34:i32 = add %33, 1i
    %x_70:i32 = let %34
    store %a, %x_70
    %36:ptr<function, i32, read_write> = access %arr, %x_70
    %37:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %38:i32 = load %37
    store %36, %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:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %44:i32 = load %43
    %45:bool = eq %42, %44
    if %45 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %46:i32 = load %a
        %47:f32 = convert %46
        %48:f32 = let %47
        %49:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %50:i32 = load %49
        %51:f32 = convert %50
        %52:f32 = let %51
        %53:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %54:i32 = load %53
        %55:f32 = convert %54
        %56:f32 = let %55
        %57:i32 = load %a
        %58:f32 = convert %57
        %59:vec4<f32> = construct %48, %52, %56, %58
        store %x_GLF_color, %59
        exit_if  # if_3
      }
      $B9: {  # false
        %60:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %61:i32 = load %60
        %62:f32 = convert %61
        %63:vec4<f32> = construct %62
        store %x_GLF_color, %63
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %66:void = call %main_1
    %67:vec4<f32> = load %x_GLF_color
    %68:main_out = construct %67
    ret %68
  }
}

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