diff --git a/src/analyses/cfg_dominators.h b/src/analyses/cfg_dominators.h index 0abee1ec6e9..31979f862a7 100644 --- a/src/analyses/cfg_dominators.h +++ b/src/analyses/cfg_dominators.h @@ -126,13 +126,13 @@ void cfg_dominators_templatet::fixedpoint(P &program) { std::list worklist; - if(program.instructions.empty()) + if(cfg.nodes_empty(program)) return; if(post_dom) - entry_node = --program.instructions.end(); + entry_node=cfg.get_last_node(program); else - entry_node = program.instructions.begin(); + entry_node=cfg.get_first_node(program); typename cfgt::nodet &n=cfg[cfg.entry_map[entry_node]]; n.dominators.insert(entry_node); @@ -228,17 +228,18 @@ void cfg_dominators_templatet::output(std::ostream &out) const it=cfg.entry_map.begin(); it!=cfg.entry_map.end(); ++it) { - unsigned n=it->first->location_number; + T n=it->first; if(post_dom) out << n << " post-dominated by "; else out << n << " dominated by "; - for(typename target_sett::const_iterator d_it=it->second.dominators.begin(); - d_it!=it->second.dominators.end();) + const auto& doms=cfg[it->second].dominators; + for(typename target_sett::const_iterator d_it=doms.begin(); + d_it!=doms.end();) { - out << (*d_it)->location_number; - if (++d_it!=it->second.dominators.end()) + out << *d_it; + if(++d_it!=doms.end()) out << ", "; } out << "\n"; diff --git a/src/goto-programs/cfg.h b/src/goto-programs/cfg.h index bbba1120574..514e62e4995 100644 --- a/src/goto-programs/cfg.h +++ b/src/goto-programs/cfg.h @@ -131,6 +131,10 @@ class cfg_baset:public graph< cfg_base_nodet > compute_edges(goto_functions, goto_program); } + I get_first_node(P &program) const { return program.instructions.begin(); } + I get_last_node(P &program) const { return --program.instructions.end(); } + bool nodes_empty(P &program) const { return program.instructions.empty(); } + }; /*******************************************************************\