@@ -415,36 +415,42 @@ bool constant_propagator_domaint::ai_simplify(
415
415
return partial_evaluate (values, condition, ns);
416
416
}
417
417
418
-
419
- bool constant_propagator_domaint::valuest::is_constant (const exprt &expr) const
418
+ class constant_propagator_is_constantt : public is_constantt
420
419
{
421
- class constant_propagator_is_constantt : public is_constantt
420
+ public:
421
+ explicit constant_propagator_is_constantt (
422
+ const replace_symbolt &replace_const)
423
+ : replace_const(replace_const)
422
424
{
423
- public:
424
- explicit constant_propagator_is_constantt (
425
- const replace_symbolt &replace_const)
426
- : replace_const(replace_const)
427
- {
428
- }
425
+ }
429
426
430
- protected:
431
- bool is_constant (const exprt &expr) const override
432
- {
433
- if (expr.id () == ID_symbol)
434
- {
435
- return replace_const.replaces_symbol (
436
- to_symbol_expr (expr).get_identifier ());
437
- }
427
+ bool is_constant (const irep_idt &id) const
428
+ {
429
+ return replace_const.replaces_symbol (id);
430
+ }
438
431
439
- return is_constantt::is_constant (expr);
440
- }
432
+ protected:
433
+ bool is_constant (const exprt &expr) const override
434
+ {
435
+ if (expr.id () == ID_symbol)
436
+ return is_constant (to_symbol_expr (expr).get_identifier ());
437
+
438
+ return is_constantt::is_constant (expr);
439
+ }
441
440
442
- const replace_symbolt &replace_const;
443
- };
441
+ const replace_symbolt &replace_const;
442
+ };
444
443
444
+ bool constant_propagator_domaint::valuest::is_constant (const exprt &expr) const
445
+ {
445
446
return constant_propagator_is_constantt (replace_const)(expr);
446
447
}
447
448
449
+ bool constant_propagator_domaint::valuest::is_constant (const irep_idt &id) const
450
+ {
451
+ return constant_propagator_is_constantt (replace_const).is_constant (id);
452
+ }
453
+
448
454
// / Do not call this when iterating over replace_const.expr_map!
449
455
bool constant_propagator_domaint::valuest::set_to_top (
450
456
const symbol_exprt &symbol_expr)
@@ -649,10 +655,9 @@ bool constant_propagator_domaint::partial_evaluate(
649
655
// if the current rounding mode is top we can
650
656
// still get a non-top result by trying all rounding
651
657
// modes and checking if the results are all the same
652
- if (!known_values.is_constant (symbol_exprt (ID_cprover_rounding_mode_str)))
653
- {
658
+ if (!known_values.is_constant (ID_cprover_rounding_mode_str))
654
659
return partial_evaluate_with_all_rounding_modes (known_values, expr, ns);
655
- }
660
+
656
661
return replace_constants_and_simplify (known_values, expr, ns);
657
662
}
658
663
0 commit comments