private ConflictResult doRelaxedCompare(DataType addedDataType, DataType existingDataType,
			Set<Long> visitedDataTypes) {

		// unwrap typedefs, possibly asymmetrically. (ie. only unwrap added vs.
		// existing)
		if (addedDataType instanceof TypeDef) {
			return doRelaxedCompare(((TypeDef) addedDataType).getBaseDataType(), existingDataType, visitedDataTypes);
		}
		if (existingDataType instanceof TypeDef) {
			return doRelaxedCompare(addedDataType, ((TypeDef) existingDataType).getBaseDataType(), visitedDataTypes);
		}

		return doStrictCompare(addedDataType, existingDataType, visitedDataTypes);
	}
Returns true if one union is a subset of another union.
<p>
Each component of the candidate partial union must be present in the 'full'
union and must be 'equiv'.
<p>
Order of components is ignored, except for unnamed components, which receive
a default name created using their ordinal position.

@param full             {@link Union} datatype that is expected to be a
                        superset of the next param.
@param part             {@link Union} datatype that is expected to be a
                        subset of the previous param.
@param visitedDataTypes identity map of datatypes to prevent loops.
@return true if part is a subset (or equal) to full.
Ghidra/Features/Base/src/main/java/ghidra/app/util/bin/format/dwarf/DWARFDataTypeConflictHandler.java