@@ -25,8 +25,6 @@ symex_bmct::symex_bmct(
2525 path_storaget &path_storage)
2626 : goto_symext(mh, outer_symbol_table, _target, path_storage),
2727 record_coverage(false ),
28- max_unwind(0 ),
29- max_unwind_is_set(false ),
3028 symex_coverage(ns)
3129{
3230}
@@ -131,25 +129,12 @@ bool symex_bmct::get_unwind(
131129 // / --unwind options to decide:
132130 if (abort_unwind_decision.is_unknown ())
133131 {
134- // We use the most specific limit we have,
135- // and 'infinity' when we have none.
132+ auto limit=unwindset.get_limit (id, source.thread_nr );
136133
137- loop_limitst &this_thread_limits=
138- thread_loop_limits[source.thread_nr ];
139-
140- loop_limitst::const_iterator l_it=this_thread_limits.find (id);
141- if (l_it!=this_thread_limits.end ())
142- this_loop_limit=l_it->second ;
134+ if (!limit.has_value ())
135+ abort_unwind_decision = tvt (false );
143136 else
144- {
145- l_it=loop_limits.find (id);
146- if (l_it!=loop_limits.end ())
147- this_loop_limit=l_it->second ;
148- else if (max_unwind_is_set)
149- this_loop_limit=max_unwind;
150- }
151-
152- abort_unwind_decision = tvt (unwind >= this_loop_limit);
137+ abort_unwind_decision = tvt (unwind >= *limit);
153138 }
154139
155140 INVARIANT (
@@ -187,25 +172,12 @@ bool symex_bmct::get_unwind_recursion(
187172 // / --unwind options to decide:
188173 if (abort_unwind_decision.is_unknown ())
189174 {
190- // We use the most specific limit we have,
191- // and 'infinity' when we have none.
192-
193- loop_limitst &this_thread_limits=
194- thread_loop_limits[thread_nr];
175+ auto limit=unwindset.get_limit (id, thread_nr);
195176
196- loop_limitst::const_iterator l_it=this_thread_limits.find (id);
197- if (l_it!=this_thread_limits.end ())
198- this_loop_limit=l_it->second ;
177+ if (!limit.has_value ())
178+ abort_unwind_decision = tvt (false );
199179 else
200- {
201- l_it=loop_limits.find (id);
202- if (l_it!=loop_limits.end ())
203- this_loop_limit=l_it->second ;
204- else if (max_unwind_is_set)
205- this_loop_limit=max_unwind;
206- }
207-
208- abort_unwind_decision = tvt (unwind>this_loop_limit);
180+ abort_unwind_decision = tvt (unwind >= *limit);
209181 }
210182
211183 INVARIANT (
0 commit comments