SKIP: FAILED

<dawn>/src/tint/lang/msl/writer/printer/printer.cc:355 internal compiler error: %b1 = block {  # root
  %buf:ptr<storage, array<u32, 1>, read_write> = var @binding_point(0, 1)
}

%g = func():i32 -> %b2 {
  %b2 = block {
    ret 0i
  }
}
%f = func():i32 -> %b3 {
  %b3 = block {
    loop [b: %b4, c: %b5] {  # loop_1
      %b4 = block {  # body
        %4:i32 = call %g
        exit_loop  # loop_1
      }
      %b5 = block {  # continuing
        next_iteration %b4
      }
    }
    %o:i32 = call %g
    ret 0i
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void -> %b6 {
  %b6 = block {
    loop [b: %b7, c: %b8] {  # loop_2
      %b7 = block {  # body
        %7:ptr<storage, u32, read_write> = access %buf, 0i
        %8:u32 = load %7
        %9:bool = eq %8, 0u
        if %9 [t: %b9] {  # if_1
          %b9 = block {  # true
            exit_loop  # loop_2
          }
        }
        %10:i32 = call %f
        %s:ptr<function, i32, read_write> = var, %10
        %12:ptr<storage, u32, read_write> = access %buf, 0i
        store %12, 0u
        continue %b8
      }
      %b8 = block {  # continuing
        next_iteration %b7
      }
    }
    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.  *
********************************************************************
