SKIP: FAILED

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

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

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

%func_ = func():i32 {
  $B2: {
    %ret:ptr<function, i32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    store %ret, 0i
    store %i, 3i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %6:i32 = load %i
        %x_39:i32 = let %6
        %8:i32 = load %i
        %x_40:i32 = let %8
        %10:i32 = and %x_40, 1i
        %11:bool = gt %x_39, %10
        if %11 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %12:i32 = load %ret
        %x_44:i32 = let %12
        %14:i32 = add %x_44, 1i
        store %ret, %14
        continue  # -> $B4
      }
      $B4: {  # continuing
        %15:ptr<uniform, i32, read> = access %x_8, 0u
        %16:i32 = load %15
        %x_47:i32 = let %16
        %18:i32 = load %i
        %x_48:i32 = let %18
        %20:i32 = sub %x_48, %x_47
        store %i, %20
        next_iteration  # -> $B3
      }
    }
    %21:i32 = load %ret
    %x_50:i32 = let %21
    ret %x_50
  }
}
%main_1 = func():void {
  $B7: {
    %24:i32 = call %func_
    %x_29:i32 = let %24
    %26:bool = eq %x_29, 2i
    if %26 [t: $B8, f: $B9] {  # if_2
      $B8: {  # true
        store %x_GLF_color, vec4<f32>(1.0f, 0.0f, 0.0f, 1.0f)
        exit_if  # if_2
      }
      $B9: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_2
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B10: {
    %28:void = call %main_1
    %29:vec4<f32> = load %x_GLF_color
    %30:main_out = construct %29
    ret %30
  }
}

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