SKIP: FAILED

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

buf0 = struct @align(4) {
  x_GLF_uniform_int_values:array<strided_arr, 5> @offset(0)
}

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

$B1: {  # root
  %x_8:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_GLF_color:ptr<private, vec4<f32>, read_write> = var
}

%func_f1_ = func(%f:ptr<function, f32, read_write>):i32 {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %9:i32 = load %8
    %x_60:i32 = let %9
    store %a, %x_60
    %11:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %12:i32 = load %11
    %x_62:i32 = let %12
    store %b, %x_62
    %14:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %15:i32 = load %14
    %x_64:i32 = let %15
    store %i, %x_64
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %x_69:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
        %20:i32 = load %19
        %x_71:i32 = let %20
        %22:bool = lt %x_69, %x_71
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:i32 = load %a
        %x_74:i32 = let %23
        %25:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %26:i32 = load %25
        %x_76:i32 = let %26
        %28:bool = gt %x_74, %x_76
        if %28 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %29:f32 = load %f
        %x_80:f32 = let %29
        %31:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %32:i32 = load %31
        %x_84:i32 = let %32
        %34:i32 = load %i
        %x_86:i32 = let %34
        %36:i32 = call %tint_f32_to_i32, %x_80
        %38:i32 = sub %36, 1i
        %39:i32 = sub %38, %x_84
        %40:i32 = add %39, %x_86
        store %a, %40
        %41:i32 = load %b
        %x_88:i32 = let %41
        %43:i32 = add %x_88, 1i
        store %b, %43
        continue  # -> $B4
      }
      $B4: {  # continuing
        %44:i32 = load %i
        %x_90:i32 = let %44
        %46:i32 = add %x_90, 1i
        store %i, %46
        next_iteration  # -> $B3
      }
    }
    %47:i32 = load %b
    %x_92:i32 = let %47
    %49:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %50:i32 = load %49
    %x_94:i32 = let %50
    %52:bool = eq %x_92, %x_94
    if %52 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %53:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %54:i32 = load %53
        %x_100:i32 = let %54
        ret %x_100
      }
      $B9: {  # false
        %56:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %57:i32 = load %56
        %x_102:i32 = let %57
        ret %x_102
      }
    }
    unreachable
  }
}
%main_1 = func():void {
  $B10: {
    %param:ptr<function, f32, read_write> = var
    store %param, 0.69999998807907104492f
    %61:i32 = call %func_f1_, %param
    %x_34:i32 = let %61
    %63:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %64:i32 = load %63
    %x_36:i32 = let %64
    %66:bool = eq %x_34, %x_36
    if %66 [t: $B11, f: $B12] {  # if_4
      $B11: {  # true
        %67:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %68:i32 = load %67
        %x_42:i32 = let %68
        %70:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %71:i32 = load %70
        %x_45:i32 = let %71
        %73:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %74:i32 = load %73
        %x_48:i32 = let %74
        %76:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %77:i32 = load %76
        %x_51:i32 = let %77
        %79:f32 = convert %x_42
        %80:f32 = let %79
        %81:f32 = convert %x_45
        %82:f32 = let %81
        %83:f32 = convert %x_48
        %84:f32 = let %83
        %85:f32 = convert %x_51
        %86:vec4<f32> = construct %80, %82, %84, %85
        store %x_GLF_color, %86
        exit_if  # if_4
      }
      $B12: {  # false
        %87:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %88:i32 = load %87
        %x_55:i32 = let %88
        %90:f32 = convert %x_55
        %x_56:f32 = let %90
        %92:vec4<f32> = construct %x_56, %x_56, %x_56, %x_56
        store %x_GLF_color, %92
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %94:void = call %main_1
    %95:vec4<f32> = load %x_GLF_color
    %96:main_out = construct %95
    ret %96
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B14: {
    %98:i32 = convert %value
    %99:bool = gte %value, -2147483648.0f
    %100:i32 = select -2147483648i, %98, %99
    %101:bool = lte %value, 2147483520.0f
    %102:i32 = select 2147483647i, %100, %101
    ret %102
  }
}

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