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
        %9:ptr<uniform, i32, read> = access %x_8, 0u
        %10:i32 = load %9
        %11:i32 = add %10, 1i
        %12:bool = lt %8, %11
        if %12 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        %13:f32 = load %s
        %14:f32 = add %13, 3.0f
        store %s, %14
        store %j, 0i
        loop [b: $B7, c: $B8] {  # loop_2
          $B7: {  # body
            %15:i32 = load %j
            %16:bool = lt %15, 10i
            if %16 [t: $B9, f: $B10] {  # if_2
              $B9: {  # true
                exit_if  # if_2
              }
              $B10: {  # false
                exit_loop  # loop_2
              }
            }
            %17:ptr<uniform, i32, read> = access %x_8, 0u
            %18:i32 = load %17
            %19:bool = eq %18, 1i
            if %19 [t: $B11] {  # if_3
              $B11: {  # true
                store %continue_execution, false
                exit_if  # if_3
              }
            }
            continue  # -> $B8
          }
          $B8: {  # continuing
            %20:i32 = load %j
            %21:i32 = add %20, 1i
            store %j, %21
            next_iteration  # -> $B7
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %22:i32 = load %i
        %23:i32 = add %22, 1i
        store %i, %23
        next_iteration  # -> $B3
      }
    }
    %24:f32 = load %s
    %x_71:f32 = let %24
    ret %x_71
  }
}
%main_1 = func():void {
  $B12: {
    %c:ptr<function, vec4<f32>, read_write> = var
    %28:f32 = call %func_
    %x_34:f32 = let %28
    %30:vec4<f32> = construct %x_34, 0.0f, 0.0f, 1.0f
    store %c, %30
    %31:f32 = call %func_
    %x_36:f32 = let %31
    %33:bool = eq %x_36, 5.0f
    if %33 [t: $B13, f: $B14] {  # if_4
      $B13: {  # true
        %34:vec4<f32> = load %c
        store %x_GLF_color, %34
        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: {
    %36:void = call %main_1
    %37:vec4<f32> = load %x_GLF_color
    %38:main_out = construct %37
    %39:bool = load %continue_execution
    %40:bool = eq %39, false
    if %40 [t: $B16] {  # if_5
      $B16: {  # true
        terminate_invocation
      }
    }
    ret %38
  }
}

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