SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 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 = block {  # 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 {
  %b2 = block {
    %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 = block {  # 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 = block {  # true
            exit_if  # if_1
          }
          %b6 = block {  # 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 = clamp %13, %15, %16
        %18:i32 = load_vector_element %12, %17
        %19:bool = eq %18, 1i
        if %19 [t: %b7, f: %b8] {  # if_2
          %b7 = block {  # true
            %x_57:i32 = load %i
            store_vector_element %a, %x_57, 5i
            exit_if  # if_2
          }
          %b8 = block {  # false
            %x_59:i32 = load %i
            %22:i32 = load %i
            store_vector_element %a, %x_59, %22
            exit_if  # if_2
          }
        }
        continue %b4
      }
      %b4 = block {  # continuing
        %23:i32 = load %i
        %24:i32 = add %23, 1i
        store %i, %24
        next_iteration %b3
      }
    }
    %25:i32 = load_vector_element %a, 0u
    %26:i32 = load_vector_element %a, 1u
    %27:i32 = add %25, %26
    %28:i32 = load_vector_element %a, 2u
    %29:i32 = add %27, %28
    %30:i32 = load_vector_element %a, 3u
    %31:i32 = add %29, %30
    store %sum, %31
    %32:i32 = load %sum
    %33:bool = eq %32, 10i
    if %33 [t: %b9, f: %b10] {  # if_3
      %b9 = block {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      %b10 = block {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out -> %b11 {
  %b11 = block {
    %35:void = call %main_1
    %36:vec4<f32> = load %x_GLF_color
    %37:main_out = construct %36
    ret %37
  }
}

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