SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: buf0 = struct @align(4) {
  three:f32 @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
}

%func_ = func():f32 {
  $B2: {
    %b:ptr<function, f32, read_write> = var
    %x_34:ptr<function, f32, read_write> = var
    %x_48:ptr<function, f32, read_write> = var
    store %b, 2.0f
    store %x_34, 2.0f
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %7:ptr<uniform, f32, read> = access %x_7, 0u
        %8:f32 = load %7
        %9:bool = eq %8, 0.0f
        if %9 [t: $B5] {  # if_1
          $B5: {  # true
            %10:f32 = load %x_34
            store %x_48, %10
            exit_loop  # loop_1
          }
        }
        %11:ptr<uniform, f32, read> = access %x_7, 0u
        %12:f32 = load %11
        %13:bool = eq %12, 0.0f
        if %13 [t: $B6] {  # if_2
          $B6: {  # true
            ret 1.0f
          }
        }
        store %b, 1.0f
        continue  # -> $B4
      }
      $B4: {  # continuing
        store %x_34, 1.0f
        store %x_48, 1.0f
        break_if true  # -> [t: exit_loop loop_1, f: $B3]
      }
    }
    %14:f32 = load %x_48
    ret %14
  }
}
%main_1 = func():void {
  $B7: {
    %16:f32 = call %func_
    %x_27:f32 = let %16
    %18:bool = eq %x_27, 1.0f
    if %18 [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: {
    %20:void = call %main_1
    %21:vec4<f32> = load %x_GLF_color
    %22:main_out = construct %21
    ret %22
  }
}

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