SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(16) {
  sequence:vec4<i32> @offset(0)
}

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

$B1: {  # root
  %x_7: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, vec4<i32>, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %sum:ptr<function, i32, read_write> = var
    store %a, vec4<i32>(0i)
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %7:i32 = load %i
        %8:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
        %9:i32 = load_vector_element %8, 3u
        %10:i32 = add %9, 1i
        %11:bool = lt %7, %10
        if %11 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %12:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
        %13:i32 = load %i
        %14:ptr<uniform, vec4<i32>, read> = access %x_7, 0u
        %15:i32 = load_vector_element %14, 0u
        %16:i32 = load %i
        %17:i32 = let %16
        %18:i32 = max %13, %15
        %19:i32 = min %18, %17
        %20:i32 = load_vector_element %12, %19
        %21:bool = eq %20, 1i
        if %21 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            %22:i32 = load %i
            %x_57:i32 = let %22
            store_vector_element %a, %x_57, 5i
            exit_if  # if_2
          }
          $B8: {  # false
            %24:i32 = load %i
            %x_59:i32 = let %24
            %26:i32 = load %i
            store_vector_element %a, %x_59, %26
            exit_if  # if_2
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %27:i32 = load %i
        %28:i32 = add %27, 1i
        store %i, %28
        next_iteration  # -> $B3
      }
    }
    %29:i32 = load_vector_element %a, 0u
    %30:i32 = load_vector_element %a, 1u
    %31:i32 = add %29, %30
    %32:i32 = load_vector_element %a, 2u
    %33:i32 = add %31, %32
    %34:i32 = load_vector_element %a, 3u
    %35:i32 = add %33, %34
    store %sum, %35
    %36:i32 = load %sum
    %37:bool = eq %36, 10i
    if %37 [t: $B9, f: $B10] {  # if_3
      $B9: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B10: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B11: {
    %39:void = call %main_1
    %40:vec4<f32> = load %x_GLF_color
    %41:main_out = construct %40
    ret %41
  }
}

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