SKIP: FAILED

../../src/tint/lang/msl/writer/printer/printer.cc:500 internal compiler error: theSSBO = struct @align(4) {
  out_data:i32 @offset(0)
}

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

%main_1 = func():void {
  $B2: {
    %x_30:ptr<function, mat2x2<f32>, read_write> = var
    %x_32:ptr<function, i32, read_write> = var
    %5:ptr<storage, i32, read_write> = access %x_4, 0u
    store %5, 42i
    store %x_30, mat2x2<f32>(vec2<f32>(0.0f))
    store %x_32, 1i
    loop [b: $B3, c: $B4] {  # loop_1
      $B3: {  # body
        %x_33:ptr<function, i32, read_write> = var
        %7:i32 = load %x_32
        %8:bool = gt %7, 0i
        if %8 [t: $B5, f: $B6] {  # if_1
          $B5: {  # true
            exit_if  # if_1
          }
          $B6: {  # false
            exit_loop  # loop_1
          }
        }
        continue  # -> $B4
      }
      $B4: {  # continuing
        %9:i32 = load %x_32
        %10:i32 = sub %9, 1i
        store %x_33, %10
        store %x_30, mat2x2<f32>(vec2<f32>(1.0f, 0.0f), vec2<f32>(0.0f, 1.0f))
        %11:i32 = load %x_33
        store %x_32, %11
        next_iteration  # -> $B3
      }
    }
    %12:ptr<function, vec2<f32>, read_write> = access %x_30, 0u
    %13:vec2<f32> = load %12
    %14:vec2<f32> = sub %13, vec2<f32>(1.0f, 0.0f)
    %15:ptr<function, vec2<f32>, read_write> = access %x_30, 1u
    %16:vec2<f32> = load %15
    %17:vec2<f32> = sub %16, vec2<f32>(0.0f, 1.0f)
    %18:mat2x2<f32> = construct %14, %17
    %19:vec2<f32> = mul vec2<f32>(1.0f), %18
    %x_41:vec2<f32> = let %19
    loop [b: $B7] {  # loop_2
      $B7: {  # body
        %21:f32 = access %x_41, 0u
        %22:bool = lt 1.0f, %21
        if %22 [t: $B8] {  # if_2
          $B8: {  # true
            exit_loop  # loop_2
          }
        }
        %23:void = msl.threadgroup_barrier 4u
        exit_loop  # loop_2
      }
    }
    ret
  }
}
%tint_symbol = @compute @workgroup_size(1, 1, 1) func():void {
  $B9: {
    %25:void = call %main_1
    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.  *
********************************************************************
