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, 2> @offset(0)
}

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

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

%main_1 = func():void {
  $B2: {
    store %x_GLF_global_loop_count, 0i
    %5:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %6:i32 = load %5
    %x_26:i32 = let %6
    %8:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %9:i32 = load %8
    %x_29:i32 = let %9
    %11:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %12:i32 = load %11
    %x_32:i32 = let %12
    %14:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %15:i32 = load %14
    %x_35:i32 = let %15
    %17:f32 = convert %x_26
    %18:f32 = let %17
    %19:f32 = convert %x_29
    %20:f32 = let %19
    %21:f32 = convert %x_32
    %22:f32 = let %21
    %23:f32 = convert %x_35
    %24:vec4<f32> = construct %18, %20, %22, %23
    store %x_GLF_color, %24
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_54:ptr<function, bool, read_write> = var
        %x_55_phi:ptr<function, bool, read_write> = var
        %27:i32 = load %x_GLF_global_loop_count
        %x_42:i32 = let %27
        %29:bool = lt %x_42, 100i
        if %29 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %30:i32 = load %x_GLF_global_loop_count
        %x_45:i32 = let %30
        %32:i32 = add %x_45, 1i
        store %x_GLF_global_loop_count, %32
        store %x_55_phi, true
        if false [t: $B7] {  # if_2
          $B7: {  # true
            %33:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
            %34:i32 = load %33
            %x_51:i32 = let %34
            %36:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
            %37:i32 = load %36
            %x_53:i32 = let %37
            %39:bool = eq %x_51, %x_53
            store %x_54, %39
            %40:bool = load %x_54
            store %x_55_phi, %40
            exit_if  # if_2
          }
        }
        %41:bool = load %x_55_phi
        %x_55:bool = let %41
        %43:bool = eq %x_55, false
        if %43 [t: $B8] {  # if_3
          $B8: {  # true
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        next_iteration  # -> $B3
      }
    }
    loop [b: $B9, c: $B10] {  # loop_2
      $B9: {  # body
        %44:i32 = load %x_GLF_global_loop_count
        %x_63:i32 = let %44
        %46:bool = lt %x_63, 100i
        if %46 [t: $B11, f: $B12] {  # if_4
          $B11: {  # true
            exit_if  # if_4
          }
          $B12: {  # false
            exit_loop  # loop_2
          }
        }
        %47:i32 = load %x_GLF_global_loop_count
        %x_66:i32 = let %47
        %49:i32 = add %x_66, 1i
        store %x_GLF_global_loop_count, %49
        %50:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
        %51:i32 = load %50
        %x_69:i32 = let %51
        %53:f32 = convert %x_69
        %x_70:f32 = let %53
        %55:vec4<f32> = construct %x_70, %x_70, %x_70, %x_70
        store %x_GLF_color, %55
        continue  # -> $B10
      }
      $B10: {  # continuing
        next_iteration  # -> $B9
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B13: {
    %57:void = call %main_1
    %58:vec4<f32> = load %x_GLF_color
    %59:main_out = construct %58
    ret %59
  }
}

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