SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: strided_arr = struct @align(8) {
  el:vec2<f32> @offset(0)
}

SSBO = struct @align(8) {
  m:array<strided_arr, 2> @offset(0)
}

$B1: {  # root
  %ssbo:ptr<storage, SSBO, read_write> = var @binding_point(0, 0)
}

%mat2x2_stride_16_to_arr = func(%m:mat2x2<f32>):array<strided_arr, 2> {
  $B2: {
    %4:vec2<f32> = access %m, 0u
    %5:strided_arr = construct %4
    %6:strided_arr = let %5
    %7:vec2<f32> = access %m, 1u
    %8:strided_arr = construct %7
    %9:array<strided_arr, 2> = construct %6, %8
    ret %9
  }
}
%arr_to_mat2x2_stride_16 = func(%arr:array<strided_arr, 2>):mat2x2<f32> {
  $B3: {
    %12:vec2<f32> = access %arr, 0u, 0u
    %13:vec2<f32> = access %arr, 1u, 0u
    %14:mat2x2<f32> = construct %12, %13
    ret %14
  }
}
%f_1 = func():void {
  $B4: {
    %16:ptr<storage, array<strided_arr, 2>, read_write> = access %ssbo, 0u
    %17:ptr<storage, array<strided_arr, 2>, read_write> = access %ssbo, 0u
    %18:array<strided_arr, 2> = load %17
    %19:mat2x2<f32> = call %arr_to_mat2x2_stride_16, %18
    %20:array<strided_arr, 2> = call %mat2x2_stride_16_to_arr, %19
    %21:void = call %tint_store_and_preserve_padding, %16, %20
    ret
  }
}
%f = @compute @workgroup_size(1, 1, 1) func():void {
  $B5: {
    %24:void = call %f_1
    ret
  }
}
%tint_store_and_preserve_padding = func(%target:ptr<storage, array<strided_arr, 2>, read_write>, %value_param:array<strided_arr, 2>):void {
  $B6: {
    loop [i: $B7, b: $B8, c: $B9] {  # loop_1
      $B7: {  # initializer
        next_iteration 0u  # -> $B8
      }
      $B8 (%idx:u32): {  # body
        %28:bool = gte %idx, 2u
        if %28 [t: $B10] {  # if_1
          $B10: {  # true
            exit_loop  # loop_1
          }
        }
        %29:ptr<storage, strided_arr, read_write> = access %target, %idx
        %30:strided_arr = access %value_param, %idx
        %31:void = call %tint_store_and_preserve_padding_1, %29, %30
        continue  # -> $B9
      }
      $B9: {  # continuing
        %33:u32 = add %idx, 1u
        next_iteration %33  # -> $B8
      }
    }
    ret
  }
}
%tint_store_and_preserve_padding_1 = func(%target_1:ptr<storage, strided_arr, read_write>, %value_param_1:strided_arr):void {  # %tint_store_and_preserve_padding_1: 'tint_store_and_preserve_padding', %target_1: 'target', %value_param_1: 'value_param'
  $B11: {
    %36:ptr<storage, vec2<f32>, read_write> = access %target_1, 0u
    %37:vec2<f32> = access %value_param_1, 0u
    store %36, %37
    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.  *
********************************************************************
