public void witnessRecordNumber(RecordNumber recordNumber) {
		switch (recordNumber.getCategory()) {
			case TYPE:
				if (recordNumber.getNumber() < 0) {
					witnessDataRecordNumberHighBitSet();
					recordNumber = pdb.fixupTypeIndex(recordNumber, AbstractMsType.class);
				}
				break;
			case ITEM:
				if (recordNumber.getNumber() < 0) {
					witnessItemRecordNumberHighBitSet();
					recordNumber = pdb.fixupTypeIndex(recordNumber, AbstractMsType.class);
				}
				break;
			// TODO: for consideration... has implications...
			//case SYMBOL:
			default:
				break;
		}
		// Separate switch because local recordNumber might have changed by fixupTypeIndex.
		switch (recordNumber.getCategory()) {
			case TYPE:
				if (recordNumber.getNumber() < pdb.getTypeProgramInterface().getTypeIndexMin()) {
					witnessPrimitive(recordNumber.getNumber());
				}
				break;
			case ITEM:
				if (recordNumber.getNumber() < pdb.getItemProgramInterface().getTypeIndexMin()) {
					// Not sure what to do here.  What are records in this range?
					// Worse is when it was originally a TYPE with high bit set. Why would it
					// just not be given a non-set high bit if primitive.
					//witnessPrimitive(recordNumber.getNumber());
				}
				break;
			default:
				break;
		}
	}
This list indicates which Symbol Types ({@link AbstractMsSymbol}) have been seen in real
 data, giving us some confidence as to whether we have parsed them OK or not.  We can set
 a break point in the method containing the switch statement to trigger whenever we find a
 symbol type not in this list.
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbReaderMetrics.java