@@ -364,6 +364,10 @@ void bdd_enginet::compute_counterexample(
364364 propertyt &property,
365365 unsigned number_of_timeframes)
366366{
367+ // Supported by BMC engine?
368+ if (!netlist_bmc_supports_property (property.normalized_expr ))
369+ return ;
370+
367371 message.status () << " Computing counterexample with " << number_of_timeframes
368372 << " timeframe(s)" << messaget::eom;
369373
@@ -372,16 +376,14 @@ void bdd_enginet::compute_counterexample(
372376 satcheckt solver{message.get_message_handler ()};
373377 bmc_map.map_timeframes (netlist, number_of_timeframes, solver);
374378
375- const namespacet ns (transition_system.symbol_table );
376-
377379 ::unwind (netlist, bmc_map, message, solver);
380+
381+ // find the netlist property
382+ auto netlist_property = netlist.properties .find (property.identifier );
383+ CHECK_RETURN (netlist_property != netlist.properties .end ());
384+
378385 ::unwind_property (
379- property.normalized_expr,
380- property.timeframe_literals,
381- message.get_message_handler(),
382- solver,
383- bmc_map,
384- ns);
386+ netlist_property->second, bmc_map, property.timeframe_literals);
385387
386388 // we need the propertyt to fail in one of the timeframes
387389 bvt clause=property.timeframe_literals ;
@@ -402,6 +404,8 @@ void bdd_enginet::compute_counterexample(
402404 throw " unexpected result from SAT solver" ;
403405 }
404406
407+ const namespacet ns (transition_system.symbol_table );
408+
405409 property.witness_trace =
406410 compute_trans_trace (property.timeframe_literals , bmc_map, solver, ns);
407411}
0 commit comments