private boolean packComponent(InternalDataTypeComponent dataTypeComponent) {

		if (lastComponent == null || dataTypeComponent.isZeroBitFieldComponent()) {
			return false;
		}

		if (dataTypeComponent.isBitFieldComponent()) {

			if (!lastComponent.isZeroBitFieldComponent() && bitFieldPacking.useMSConvention()) {
				if (!lastComponent.isBitFieldComponent()) {
					return false; // can't pack bitfield with non-bitfield - start new group
				}
				if (getBitFieldTypeSize(dataTypeComponent) != getBitFieldTypeSize(lastComponent)) {
					return false; // bitfield base types differ in size - start new group
				}
			}

			alignAndPackBitField(dataTypeComponent);  // relies on lastComponent

			return true;
		}

		if (!lastComponent.isZeroBitFieldComponent() && bitFieldPacking.useMSConvention()) {
			return false; // start new group for non-bitfield
		}

		int offset;
		if (lastComponent.isZeroBitFieldComponent()) {
			offset = groupOffset;
		}
		else {
			offset = lastComponent.getOffset() + lastComponent.getLength();
		}

		alignAndPackNonBitfieldComponent(dataTypeComponent, offset);

		return true;
	}
Adjust lastComponent which must be a zero-length bitfield and its associated
groupOffset based upon the adjusted alignment.
@param ordinal component ordinal assignment
@param minimumAlignment minimum alignment of component immediately after
the zero-length component
Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/AlignedComponentPacker.java