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_8: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_ = func():f32 {
  $B2: {
    %s:ptr<function, f32, read_write> = var
    %i:ptr<function, i32, read_write> = var
    %j:ptr<function, i32, read_write> = var
    store %s, 2.0f
    store %i, 0i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %8:i32 = load %i
        %x_47:i32 = let %8
        %10:ptr<uniform, i32, read> = access %x_8, 0u
        %11:i32 = load %10
        %x_49:i32 = let %11
        %13:i32 = add %x_49, 1i
        %14:bool = lt %x_47, %13
        if %14 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %15:f32 = load %s
        %x_53:f32 = let %15
        %17:f32 = add %x_53, 3.0f
        store %s, %17
        store %j, 0i
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %18:i32 = load %j
            %x_59:i32 = let %18
            %20:bool = lt %x_59, 10i
            if %20 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %21:ptr<uniform, i32, read> = access %x_8, 0u
            %22:i32 = load %21
            %x_63:i32 = let %22
            %24:bool = eq %x_63, 1i
            if %24 [t: $B11] {  # if_3
              $B11: {  # true
                store %continue_execution, false
                exit_if  # if_3
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %25:i32 = load %j
            %x_67:i32 = let %25
            %27:i32 = add %x_67, 1i
            store %j, %27
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %28:i32 = load %i
        %x_69:i32 = let %28
        %30:i32 = add %x_69, 1i
        store %i, %30
        next_iteration  # -> $B3
      }
    }
    %31:f32 = load %s
    %x_71:f32 = let %31
    ret %x_71
  }
}
%main_1 = func():void {
  $B12: {
    %c:ptr<function, vec4<f32>, read_write> = var
    %35:f32 = call %func_
    %x_34:f32 = let %35
    %37:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
    store %c, %37
    %38:f32 = call %func_
    %x_36:f32 = let %38
    %40:bool = eq %x_36, 5.0f
    if %40 [t: $B13, f: $B14] {  # if_4
      $B13: {  # true
        %41:vec4<f32> = load %c
        %x_41:vec4<f32> = let %41
        store %x_GLF_color, %x_41
        exit_if  # if_4
      }
      $B14: {  # false
        store %x_GLF_color, vec4<f32>(0.0f)
        exit_if  # if_4
      }
    }
    ret
  }
}
%tint_symbol = @fragment func():main_out {
  $B15: {
    %44:void = call %main_1
    %45:vec4<f32> = load %x_GLF_color
    %46:main_out = construct %45
    %47:bool = load %continue_execution
    %48:bool = eq %47, false
    if %48 [t: $B16] {  # if_5
      $B16: {  # true
        terminate_invocation
      }
    }
    ret %46
  }
}

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