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

buf2 = struct @align(8) {
  injectionSwitch:vec2<f32> @offset(0)
}

strided_arr_1 = struct @align(4) {
  el:f32 @offset(0)
}

buf1 = 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_GLF_color:ptr<private, vec4<f32>, read_write> = var
  %x_6:ptr<uniform, buf0, read> = var @binding_point(0, 0)
  %x_9:ptr<uniform, buf2, read> = var @binding_point(0, 2)
  %x_11:ptr<uniform, buf1, read> = var @binding_point(0, 1)
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%main_1 = func():void {
  $B2: {
    %a:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %a, 1i
    %9:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %10:i32 = load %9
    %x_38:i32 = let %10
    %12:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %13:i32 = load %12
    %x_41:i32 = let %13
    %15:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %16:i32 = load %15
    %x_44:i32 = let %16
    %18:ptr<uniform, i32, read> = access %x_6, 0u, 0i, 0u
    %19:i32 = load %18
    %x_47:i32 = let %19
    %21:f32 = convert %x_38
    %22:f32 = let %21
    %23:f32 = convert %x_41
    %24:f32 = let %23
    %25:f32 = convert %x_44
    %26:f32 = let %25
    %27:f32 = convert %x_47
    %28:vec4<f32> = construct %22, %24, %26, %27
    store %x_GLF_color, %28
    %29:ptr<uniform, i32, read> = access %x_6, 0u, 1i, 0u
    %30:i32 = load %29
    %x_51:i32 = let %30
    store %i, %x_51
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %32:i32 = load %i
        %x_56:i32 = let %32
        %34:ptr<uniform, i32, read> = access %x_6, 0u, 2i, 0u
        %35:i32 = load %34
        %x_58:i32 = let %35
        %37:bool = lt %x_56, %x_58
        if %37 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %38:i32 = load %a
        %x_61:i32 = let %38
        %40:i32 = add %x_61, 1i
        store %a, %40
        %41:bool = gt %x_61, 3i
        if %41 [t: $B7] {  # if_2
          $B7: {  # true
            exit_loop  # loop_1
          }
        }
        %42:ptr<uniform, vec2<f32>, read> = access %x_9, 0u
        %43:f32 = load_vector_element %42, 0u
        %x_67:f32 = let %43
        %45:ptr<uniform, f32, read> = access %x_11, 0u, 0i, 0u
        %46:f32 = load %45
        %x_69:f32 = let %46
        %48:bool = gt %x_67, %x_69
        if %48 [t: $B8] {  # if_3
          $B8: {  # true
            store %continue_execution, false
            exit_if  # if_3
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %49:i32 = load %i
        %x_73:i32 = let %49
        %51:i32 = add %x_73, 1i
        store %i, %51
        next_iteration  # -> $B3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B9: {
    %53:void = call %main_1
    %54:vec4<f32> = load %x_GLF_color
    %55:main_out = construct %54
    %56:bool = load %continue_execution
    %57:bool = eq %56, false
    if %57 [t: $B10] {  # if_4
      $B10: {  # true
        terminate_invocation
      }
    }
    ret %55
  }
}

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