SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: $B1: {  # root
  %non_uniform_global:ptr<storage, i32, read_write> = var @binding_point(0, 0)
  %output:ptr<storage, f32, read_write> = var @binding_point(0, 1)
  %continue_execution:ptr<private, bool, read_write> = var, true
}

%tint_symbol = @fragment func():void {
  $B2: {
    %5:i32 = load %non_uniform_global
    %6:bool = lt %5, 0i
    if %6 [t: $B3] {  # if_1
      $B3: {  # true
        store %continue_execution, false
        exit_if  # if_1
      }
    }
    %7:f32 = dpdx 1.0f
    %8:f32 = let %7
    %9:bool = load %continue_execution
    if %9 [t: $B4] {  # if_2
      $B4: {  # true
        store %output, %8
        exit_if  # if_2
      }
    }
    %10:f32 = load %output
    %11:bool = lt %10, 0.0f
    if %11 [t: $B5] {  # if_3
      $B5: {  # true
        %i:ptr<function, i32, read_write> = var, 0i
        loop [b: $B6, c: $B7] {  # loop_1
          $B6: {  # body
            %13:f32 = load %output
            %14:f32 = let %13
            %15:i32 = load %i
            %16:f32 = convert %15
            %17:bool = gt %14, %16
            if %17 [t: $B8] {  # if_4
              $B8: {  # true
                %18:i32 = load %i
                %19:f32 = convert %18
                %20:f32 = let %19
                %21:bool = load %continue_execution
                if %21 [t: $B9] {  # if_5
                  $B9: {  # true
                    store %output, %20
                    exit_if  # if_5
                  }
                }
                %22:bool = load %continue_execution
                %23:bool = eq %22, false
                if %23 [t: $B10] {  # if_6
                  $B10: {  # true
                    terminate_invocation
                  }
                }
                ret
              }
            }
            continue  # -> $B7
          }
          $B7: {  # continuing
            %24:i32 = load %i
            %25:i32 = add %24, 1i
            store %i, %25
            %26:i32 = load %i
            %27:bool = eq %26, 5i
            break_if %27  # -> [t: exit_loop loop_1, f: $B6]
          }
        }
        %28:bool = load %continue_execution
        %29:bool = eq %28, false
        if %29 [t: $B11] {  # if_7
          $B11: {  # true
            terminate_invocation
          }
        }
        ret
      }
    }
    %30:bool = load %continue_execution
    %31:bool = eq %30, false
    if %31 [t: $B12] {  # if_8
      $B12: {  # true
        terminate_invocation
      }
    }
    ret
  }
}

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