SKIP: FAILED

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

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

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

%func_i1_ = func(%x:ptr<function, i32, read_write>):i32 {
  $B2: {
    %6:i32 = load %x
    %7:bool = eq %6, 10i
    if %7 [t: $B3] {  # if_1
      $B3: {  # true
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    %8:i32 = load %x
    %x_49:i32 = let %8
    ret %x_49
  }
}
%main_1 = func():void {
  $B4: {
    %a:ptr<function, i32, read_write> = var
    %b:ptr<function, i32, read_write> = var
    %param:ptr<function, i32, read_write> = var
    %x_35:ptr<function, i32, read_write> = var
    %x_37:ptr<function, i32, read_write> = var
    store %a, 0i
    %16:ptr<uniform, i32, read> = access %x_9, 0u
    %17:i32 = load %16
    %x_33:i32 = let %17
    store %b, %x_33
    store %x_35, %x_33
    loop [b: $B5, c: $B6] {  # loop_1
      $B5: {  # body
        %19:i32 = load %x_35
        store %param, %19
        %20:i32 = call %func_i1_, %param
        store %x_37, %20
        %21:i32 = load %x_37
        store %a, %21
        %22:i32 = load %x_35
        %23:i32 = add %22, 1i
        %x_36:i32 = let %23
        store %b, %x_36
        store %x_35, %x_36
        %25:bool = lt %x_36, 4i
        if %25 [t: $B7, f: $B8] {  # if_2
          $B7: {  # true
            exit_if  # if_2
          }
          $B8: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B6
      }
      $B6: {  # continuing
        next_iteration  # -> $B5
      }
    }
    %26:i32 = load %x_37
    %27:bool = eq %26, 3i
    if %27 [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: {
    %29:void = call %main_1
    %30:vec4<f32> = load %x_GLF_color
    %31:main_out = construct %30
    %32:bool = load %continue_execution
    %33:bool = eq %32, false
    if %33 [t: $B12] {  # if_4
      $B12: {  # true
        terminate_invocation
      }
    }
    ret %31
  }
}

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