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