SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  one:i32 @offset(0)
}

S = struct @align(4) {
  x:i32 @offset(0)
  y:i32 @offset(4)
}

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

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

%func_struct_S_i1_i11_ = func(%arg:ptr<function, S, read_write>):void {
  $B2: {
    %5:ptr<function, i32, read_write> = access %arg, 1u
    store %5, 1i
    ret
  }
}
%main_1 = func():void {
  $B3: {
    %a:ptr<function, f32, read_write> = var
    %b:ptr<function, array<S, 2>, read_write> = var
    %param:ptr<function, S, read_write> = var
    store %a, 5.0f
    loop [b: $B4, c: $B5] {  # loop_1
      $B4: {  # body
        %10:ptr<uniform, i32, read> = access %x_10, 0u
        %11:i32 = load %10
        %x_43:i32 = let %11
        %13:ptr<function, i32, read_write> = access %b, %x_43, 0u
        store %13, 1i
        %14:ptr<function, i32, read_write> = access %b, 1i, 0u
        %15:i32 = load %14
        %16:bool = eq %15, 1i
        if %16 [t: $B6] {  # if_1
          $B6: {  # true
            %17:ptr<uniform, i32, read> = access %x_10, 0u
            %18:i32 = load %17
            %19:bool = eq %18, 1i
            if %19 [t: $B7] {  # if_2
              $B7: {  # true
                exit_loop  # loop_1
              }
            }
            %20:ptr<function, S, read_write> = access %b, 1i
            %21:S = load %20
            store %param, %21
            %22:void = call %func_struct_S_i1_i11_, %param
            %23:ptr<function, S, read_write> = access %b, 1i
            %24:S = load %param
            store %23, %24
            %25:ptr<function, i32, read_write> = access %b, 1i, 1u
            %26:i32 = load %25
            %27:f32 = convert %26
            store %a, %27
            exit_if  # if_1
          }
        }
        store %a, 0.0f
        continue  # -> $B5
      }
      $B5: {  # continuing
        break_if true  # -> [t: exit_loop loop_1, f: $B4]
      }
    }
    %28:f32 = load %a
    %29:bool = eq %28, 5.0f
    if %29 [t: $B8, f: $B9] {  # if_3
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_3
      }
      $B9: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_3
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %31:void = call %main_1
    %32:vec4<f32> = load %x_GLF_color
    %33:main_out = construct %32
    ret %33
  }
}

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