+2009-08-27 Roland McGrath <roland@redhat.com>
+
+ * c++/dwarf_output (dwarf_output::copier::seen::promote_pending):
+ Notice circularity inside resolve_refs.
+
2009-08-25 Roland McGrath <roland@redhat.com>
* c++/dwarf_tracker: Soup up circular reference handling to handle
{
_m_die->dump (true) << " promoting " << what << " "
<< (void *) final << "...\n";
+ assert (_m_die->_m_resolving == NULL);
_m_die->_m_resolving = final;
}
inline ~entry_promoter ()
<< final << "/" << (_m_final != NULL)
<< " nrefs " << _m_patch.size () << "\n";
+ if (_m_resolving != NULL)
+ {
+ /* We are inside a resolve_refs call already promoting us.
+ Prune the circularity. */
+ if (final)
+ *_m_resolving = true;
+ else
+ {
+ assert (was_dangling);
+ ++c->_m_defined;
+ resolve_circular_refs (c, this);
+ }
+ dump (false, true) << " pruned circularity!\n";
+ return;
+ }
+
if (!final)
{
// We are now pending but not dangling. Adjust bookkeeping.