@@ -606,10 +606,11 @@ void goto_symext::try_filter_value_sets(
606
606
value_setst::valuest value_set_elements;
607
607
original_value_set.get_value_set (*symbol_expr, value_set_elements, ns);
608
608
609
- std::vector<exprt> delete_from_jump_taken_value_set;
610
- std::vector<exprt> delete_from_jump_not_taken_value_set;
611
- delete_from_jump_taken_value_set.reserve (value_set_elements.size ());
612
- delete_from_jump_not_taken_value_set.reserve (value_set_elements.size ());
609
+
610
+ std::unordered_set<exprt, irep_hash> erase_from_jump_taken_value_set;
611
+ std::unordered_set<exprt, irep_hash> erase_from_jump_not_taken_value_set;
612
+ erase_from_jump_taken_value_set.reserve (value_set_elements.size ());
613
+ erase_from_jump_not_taken_value_set.reserve (value_set_elements.size ());
613
614
614
615
// Try evaluating the condition with the symbol replaced by a pointer to each
615
616
// one of its possible values in turn. If that leads to a true for some
@@ -667,29 +668,25 @@ void goto_symext::try_filter_value_sets(
667
668
668
669
if (jump_taken_value_set && modified_condition.is_false ())
669
670
{
670
- delete_from_jump_taken_value_set. emplace_back (value_set_element);
671
+ erase_from_jump_taken_value_set. insert (value_set_element);
671
672
}
672
673
else if (jump_not_taken_value_set && modified_condition.is_true ())
673
674
{
674
- delete_from_jump_not_taken_value_set. emplace_back (value_set_element);
675
+ erase_from_jump_not_taken_value_set. insert (value_set_element);
675
676
}
676
677
}
677
- if (jump_taken_value_set && !delete_from_jump_taken_value_set .empty ())
678
+ if (jump_taken_value_set && !erase_from_jump_taken_value_set .empty ())
678
679
{
679
680
value_sett::entryt *entry = jump_taken_value_set->get_entry_for_symbol (
680
681
symbol_expr->get_identifier (), symbol_type, " " , ns);
681
- for (const exprt &value_to_erase : delete_from_jump_taken_value_set)
682
- {
683
- jump_taken_value_set->erase_value_from_entry (*entry, value_to_erase);
684
- }
682
+ jump_taken_value_set->erase_values_from_entry (
683
+ *entry, erase_from_jump_taken_value_set);
685
684
}
686
- if (jump_not_taken_value_set && !delete_from_jump_not_taken_value_set .empty ())
685
+ if (jump_not_taken_value_set && !erase_from_jump_not_taken_value_set .empty ())
687
686
{
688
687
value_sett::entryt *entry = jump_not_taken_value_set->get_entry_for_symbol (
689
688
symbol_expr->get_identifier (), symbol_type, " " , ns);
690
- for (const exprt &value_to_erase : delete_from_jump_not_taken_value_set)
691
- {
692
- jump_not_taken_value_set->erase_value_from_entry (*entry, value_to_erase);
693
- }
689
+ jump_not_taken_value_set->erase_values_from_entry (
690
+ *entry, erase_from_jump_not_taken_value_set);
694
691
}
695
692
}
0 commit comments