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
    %x_40:i32 = let %10
    store %i, %x_40
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %12:i32 = load %i
        %x_45:i32 = let %12
        %14:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
        %15:i32 = load %14
        %x_47:i32 = let %15
        %17:bool = lt %x_45, %x_47
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %i
        %x_50:i32 = let %18
        %20:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %21:i32 = load %20
        %x_52:i32 = let %21
        %23:ptr<function, i32, read_write> = access %arr, %x_50
        store %23, %x_52
        continue  # -> $B4
      }
      $B4: {  # continuing
        %24:i32 = load %i
        %x_54:i32 = let %24
        %26:i32 = add %x_54, 1i
        store %i, %26
        next_iteration  # -> $B3
      }
    }
    store %a, -1i
    %27:f32 = load_vector_element %gl_FragCoord, 1u
    %x_57:f32 = let %27
    %29:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
    %30:f32 = load %29
    %x_59:f32 = let %30
    %32:bool = lt %x_57, %x_59
    %33:bool = eq %32, false
    if %33 [t: $B7] {  # if_2
      $B7: {  # true
        %34:i32 = load %a
        %x_64:i32 = let %34
        %36:i32 = add %x_64, 1i
        %x_65:i32 = let %36
        store %a, %x_65
        %38:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
        %39:i32 = load %38
        %x_67:i32 = let %39
        %41:ptr<function, i32, read_write> = access %arr, %x_65
        store %41, %x_67
        exit_if  # if_2
      }
    }
    %42:i32 = load %a
    %x_69:i32 = let %42
    %44:i32 = add %x_69, 1i
    %x_70:i32 = let %44
    store %a, %x_70
    %46:ptr<uniform, i32, read> = access %x_7, 0u, 2i, 0u
    %47:i32 = load %46
    %x_72:i32 = let %47
    %49:ptr<function, i32, read_write> = access %arr, %x_70
    store %49, %x_72
    %50:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
    %51:i32 = load %50
    %x_75:i32 = let %51
    %53:ptr<function, i32, read_write> = access %arr, %x_75
    %54:i32 = load %53
    %x_77:i32 = let %54
    %56:ptr<uniform, i32, read> = access %x_7, 0u, 1i, 0u
    %57:i32 = load %56
    %x_79:i32 = let %57
    %59:bool = eq %x_77, %x_79
    if %59 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %60:i32 = load %a
        %x_84:i32 = let %60
        %62:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %63:i32 = load %62
        %x_87:i32 = let %63
        %65:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %66:i32 = load %65
        %x_90:i32 = let %66
        %68:i32 = load %a
        %x_92:i32 = let %68
        %70:f32 = convert %x_84
        %71:f32 = let %70
        %72:f32 = convert %x_87
        %73:f32 = let %72
        %74:f32 = convert %x_90
        %75:f32 = let %74
        %76:f32 = convert %x_92
        %77:vec4<f32> = construct %71, %73, %75, %76
        store %x_GLF_color, %77
        exit_if  # if_3
      }
      $B9: {  # false
        %78:ptr<uniform, i32, read> = access %x_7, 0u, 0i, 0u
        %79:i32 = load %78
        %x_96:i32 = let %79
        %81:f32 = convert %x_96
        %x_97:f32 = let %81
        %83:vec4<f32> = construct %x_97, %x_97, %x_97, %x_97
        store %x_GLF_color, %83
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func(%gl_FragCoord_param:vec4<f32> [@position]):main_out {
  $B10: {
    store %gl_FragCoord, %gl_FragCoord_param
    %86:void = call %main_1
    %87:vec4<f32> = load %x_GLF_color
    %88:main_out = construct %87
    ret %88
  }
}

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