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

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %b:ptr<function, f32, read_write> = var
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %9:i32 = load %8
    %x_34:i32 = let %9
    store %a, %x_34
    %11:i32 = load %a
    %x_35:i32 = let %11
    %13:i32 = add %x_35, 1i
    store %a, %13
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_38:i32 = let %15
    store %i, %x_38
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %17:i32 = load %i
        %x_43:i32 = let %17
        %19:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %20:i32 = load %19
        %x_45:i32 = let %20
        %22:bool = lt %x_43, %x_45
        if %22 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %23:i32 = load %i
        %x_48:i32 = let %23
        %25:i32 = load %a
        %x_50:i32 = let %25
        %27:f32 = convert %x_48
        %28:i32 = negation %x_50
        %29:f32 = ldexp %27, %28
        store %b, %29
        continue  # -> $B4
      }
      $B4: {  # continuing
        %30:i32 = load %i
        %x_53:i32 = let %30
        %32:i32 = add %x_53, 1i
        store %i, %32
        next_iteration  # -> $B3
      }
    }
    %33:f32 = load %b
    %x_55:f32 = let %33
    %35:ptr<uniform, f32, read> = access %x_10, 0u, 0i, 0u
    %36:f32 = load %35
    %x_57:f32 = let %36
    %38:bool = eq %x_55, %x_57
    if %38 [t: $B7, f: $B8] {  # if_2
      $B7: {  # true
        %39:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %40:i32 = load %39
        %x_63:i32 = let %40
        %42:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %43:i32 = load %42
        %x_66:i32 = let %43
        %45:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
        %46:i32 = load %45
        %x_69:i32 = let %46
        %48:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %49:i32 = load %48
        %x_72:i32 = let %49
        %51:f32 = convert %x_63
        %52:f32 = let %51
        %53:f32 = convert %x_66
        %54:f32 = let %53
        %55:f32 = convert %x_69
        %56:f32 = let %55
        %57:f32 = convert %x_72
        %58:vec4<f32> = construct %52, %54, %56, %57
        store %x_GLF_color, %58
        exit_if  # if_2
      }
      $B8: {  # false
        %59:f32 = load %b
        %x_75:f32 = let %59
        %61:vec4<f32> = construct %x_75, %x_75, %x_75, %x_75
        store %x_GLF_color, %61
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %63:void = call %main_1
    %64:vec4<f32> = load %x_GLF_color
    %65:main_out = construct %64
    ret %65
  }
}

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