diff --git a/spot/twaalgos/translate_aa.cc b/spot/twaalgos/translate_aa.cc index 6be7c4f85..50096a2c3 100644 --- a/spot/twaalgos/translate_aa.cc +++ b/spot/twaalgos/translate_aa.cc @@ -124,19 +124,16 @@ namespace spot bool edge_is_acc = ((trans_based && e.acc) || (!trans_based && sere_aut->state_is_accepting(e.dst))); - if (edge_is_acc) - { - // point to accepting sink instead of original dst if asked - if (use_accepting_sink) - aut_->new_edge(new_st, accepting_sink_, e.cond); - else - { - unsigned new_e = aut_->new_edge(new_st, register_state(e.dst), e.cond); - // remember if old edges were accepting - if (acc_edges != nullptr) - acc_edges->push_back(new_e); - } - } + unsigned new_edge; + // point to accepting sink instead of original dst if asked + if(use_accepting_sink && edge_is_acc) + new_edge = aut_->new_edge(new_st, accepting_sink_, e.cond); + else + new_edge = aut_->new_edge(new_st, register_state(e.dst), e.cond); + + // remember if old edges were accepting + if (acc_edges != nullptr && edge_is_acc) + acc_edges->push_back(new_edge); } } @@ -340,6 +337,9 @@ namespace spot for (unsigned i : acc_edges) { auto& e1 = aut_->edge_storage(i); + // self loop used to mark accepting state, skip it! + if (e1.cond == bddfalse) + continue; for (const auto& e2 : aut_->out(rhs_init)) aut_->new_edge(e1.src, e2.dst, e1.cond & e2.cond); }