SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: S = struct @align(16) {
  a:i32 @offset(0)
  b:vec4<f32> @offset(16)
  c:mat2x2<f32> @offset(32)
}

$B1: {  # root
  %v:ptr<storage, S, read_write> = var @binding_point(0, 0)
  %i:ptr<private, u32, read_write> = var
}

%idx1 = func():i32 {
  $B2: {
    %4:u32 = load %i
    %5:u32 = add %4, 1u
    store %i, %5
    ret 1i
  }
}
%idx2 = func():i32 {
  $B3: {
    %7:u32 = load %i
    %8:u32 = add %7, 2u
    store %i, %8
    ret 1i
  }
}
%idx3 = func():i32 {
  $B4: {
    %10:u32 = load %i
    %11:u32 = add %10, 3u
    store %i, %11
    ret 1i
  }
}
%foo = func():void {
  $B5: {
    %a:ptr<function, array<f32, 4>, read_write> = var, array<f32, 4>(0.0f)
    loop [i: $B6, b: $B7, c: $B8] {  # loop_1
      $B6: {  # initializer
        %14:i32 = call %idx1
        %15:ptr<function, f32, read_write> = access %a, %14
        %16:ptr<function, f32, read_write> = let %15
        %17:f32 = load %16
        %18:f32 = mul %17, 2.0f
        store %16, %18
        next_iteration  # -> $B7
      }
      $B7: {  # body
        %19:i32 = call %idx2
        %20:ptr<function, f32, read_write> = access %a, %19
        %21:f32 = load %20
        %22:bool = lt %21, 10.0f
        if %22 [t: $B9, f: $B10] {  # if_1
          $B9: {  # true
            exit_if  # if_1
          }
          $B10: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B8
      }
      $B8: {  # continuing
        %23:i32 = call %idx3
        %24:ptr<function, f32, read_write> = access %a, %23
        %25:ptr<function, f32, read_write> = let %24
        %26:f32 = load %25
        %27:f32 = add %26, 1.0f
        store %25, %27
        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.  *
********************************************************************
