Description
My recollection of the discussion at the 2020-10-20 status meeting (with the usual caveat that I'm still not solid on the subject matter):
A pointer may have multiple immediate root causes of wildness; the example mentioned was a void *
in an extern
. 3C should be able to report all of them. Currently 3C cannot because the pointer gets a constraint edge from the global "wild" node and each constraint edge can have only one associated reason. I guess one reason per edge has been sufficient for all other edges, but not for root-cause-of-wildness edges. Possible solutions:
- Allow every edge to hold multiple reasons. May complicate all code that handles edge reasons and hurt performance.
- Use additional nodes as needed to represent root causes of wildness so we have a separate edge for each reason.
Since solution 2 was my idea, Mike suggested that I might eventually implement it as my first subject-matter contribution. However, someone who knows 3C better than I do should think for a moment if any other case is likely to arise in which we might want multiple reasons on a single constraint edge and, if so, whether we'd be satisfied to use extra nodes for that too.