Skip to content
  • Aaron Suen's avatar
    MAJOR: Prevent aliasing in underride · a7051dcc
    Aaron Suen authored
    It was discovered that concrete nodes tend to get way
    too many groups in many cases, and the cause of this
    seems to be table aliasing in underride.
    
    Underride no longer reuses (aliases) the original source
    tables when it copies a table into the target, but makes
    a deep copy.  This is a significant change because the
    underride logic is used in many places, and so this has
    very broad impact.  This may fix other bugs caused by
    table aliasing, including ones that may be "load-bearing",
    so we will need to be on the look-out for any unexpected
    changes in behavior.
    
    In order to work for underride, deepcopy needed to be
    extended to support cycles and other non-simple graph
    structures.
    
    This may have some performance impact where
    underride is used (mostly startup time), and where
    deepcopy is used (DNTs) but that should not be very
    large as long as data structures are not excessively
    complex.
    a7051dcc