diff --git a/src/analyses/cfg_dominators.h b/src/analyses/cfg_dominators.h index 01ca0871a16..209a76852e6 100644 --- a/src/analyses/cfg_dominators.h +++ b/src/analyses/cfg_dominators.h @@ -124,13 +124,13 @@ void cfg_dominators_templatet
::fixedpoint(P &program)
{
std::list ::fixedpoint(P &program)
/*******************************************************************\
+Function: dominators_pretty_print_node
+
+ Inputs: `node` to print and stream `out` to pretty-print it to
+
+ Outputs:
+
+ Purpose: Pretty-print a single node in the dominator tree.
+ Supply a specialisation if operator<< is not sufficient.
+
+\*******************************************************************/
+
+template ::output(std::ostream &out) const
{
for(const auto &node : cfg.entry_map)
{
- unsigned n=node.first->location_number;
+ T n=node.first;
+ dominators_pretty_print_node(n, out);
if(post_dom)
- out << n << " post-dominated by ";
+ out << " post-dominated by ";
else
- out << n << " dominated by ";
- for(typename target_sett::const_iterator
- d_it=node.second.dominators.begin();
- d_it!=node.second.dominators.end();
- ) // no d_it++
+ out << " dominated by ";
+ bool first=true;
+ for(const auto &d : cfg[node.second].dominators)
{
- out << (*d_it)->location_number;
- if (++d_it!=node.second.dominators.end())
+ if(!first)
out << ", ";
+ first=false;
+ dominators_pretty_print_node(d, out);
}
out << "\n";
}
@@ -240,4 +259,12 @@ typedef cfg_dominators_templatet