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
    store %a, %9
    %10:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %11:i32 = load %10
    store %b, %11
    %12:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
    %13:i32 = load %12
    store %i, %13
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %14:i32 = load %i
        %15:ptr<uniform, i32, read> = access %x_8, 0u, 4i, 0u
        %16:i32 = load %15
        %17:bool = lt %14, %16
        if %17 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %18:i32 = load %a
        %19:ptr<uniform, i32, read> = access %x_8, 0u, 3i, 0u
        %20:i32 = load %19
        %21:bool = gt %18, %20
        if %21 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %22:f32 = load %f
        %23:i32 = call %tint_f32_to_i32, %22
        %25:i32 = sub %23, 1i
        %26:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %27:i32 = load %26
        %28:i32 = sub %25, %27
        %29:i32 = load %i
        %30:i32 = add %28, %29
        store %a, %30
        %31:i32 = load %b
        %32:i32 = add %31, 1i
        store %b, %32
        continue  # -> $B4
      }
      $B4: {  # continuing
        %33:i32 = load %i
        %34:i32 = add %33, 1i
        store %i, %34
        next_iteration  # -> $B3
      }
    }
    %35:i32 = load %b
    %36:ptr<uniform, i32, read> = access %x_8, 0u, 0i, 0u
    %37:i32 = load %36
    %38:bool = eq %35, %37
    if %38 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        %39:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %40:i32 = load %39
        %x_100:i32 = let %40
        ret %x_100
      }
      $B9: {  # false
        %42:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %43:i32 = load %42
        %x_102:i32 = let %43
        ret %x_102
      }
    }
    unreachable
  }
}
%main_1 = func():void {
  $B10: {
    %param:ptr<function, f32, read_write> = var
    store %param, 0.69999998807907104492f
    %47:i32 = call %func_f1_, %param
    %x_34:i32 = let %47
    %49:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
    %50:i32 = load %49
    %51:bool = eq %x_34, %50
    if %51 [t: $B11, f: $B12] {  # if_4
      $B11: {  # true
        %52:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %53:i32 = load %52
        %54:f32 = convert %53
        %55:f32 = let %54
        %56:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %57:i32 = load %56
        %58:f32 = convert %57
        %59:f32 = let %58
        %60:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %61:i32 = load %60
        %62:f32 = convert %61
        %63:f32 = let %62
        %64:ptr<uniform, i32, read> = access %x_8, 0u, 1i, 0u
        %65:i32 = load %64
        %66:f32 = convert %65
        %67:vec4<f32> = construct %55, %59, %63, %66
        store %x_GLF_color, %67
        exit_if  # if_4
      }
      $B12: {  # false
        %68:ptr<uniform, i32, read> = access %x_8, 0u, 2i, 0u
        %69:i32 = load %68
        %70:f32 = convert %69
        %71:vec4<f32> = construct %70
        store %x_GLF_color, %71
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %73:void = call %main_1
    %74:vec4<f32> = load %x_GLF_color
    %75:main_out = construct %74
    ret %75
  }
}
%tint_f32_to_i32 = func(%value:f32):i32 {
  $B14: {
    %77:i32 = convert %value
    %78:bool = gte %value, -2147483648.0f
    %79:i32 = select -2147483648i, %77, %78
    %80:bool = lte %value, 2147483520.0f
    %81:i32 = select 2147483647i, %79, %80
    ret %81
  }
}

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