File tree Expand file tree Collapse file tree 1 file changed +25
-4
lines changed Expand file tree Collapse file tree 1 file changed +25
-4
lines changed Original file line number Diff line number Diff line change @@ -2606,16 +2606,37 @@ exprt verilog_typecheck_exprt::convert_unary_expr(unary_exprt expr)
2606
2606
expr.type () = expr.op ().operands ()[0 ].type ();
2607
2607
return std::move (expr);
2608
2608
}
2609
- else
2609
+ else if (expr. id () == ID_bitnot)
2610
2610
{
2611
2611
convert_expr (expr.op ());
2612
2612
expr.type () = expr.op ().type ();
2613
2613
2614
- // check boolean operators
2615
-
2616
- if (expr.type ().id ()==ID_bool && expr.id ()==ID_bitnot)
2614
+ // Boolean?
2615
+ if (expr.type ().id () == ID_bool)
2617
2616
expr.id (ID_not);
2618
2617
}
2618
+ else if (expr.id () == ID_posedge || expr.id () == ID_negedge)
2619
+ {
2620
+ convert_expr (expr.op ());
2621
+ expr.type () = bool_typet{};
2622
+ }
2623
+ else if (expr.id () == ID_verilog_smv_eventually)
2624
+ {
2625
+ convert_expr (expr.op ());
2626
+ make_boolean (expr.op ());
2627
+ expr.type () = bool_typet{};
2628
+ }
2629
+ else if (
2630
+ expr.id () == ID_postincrement || expr.id () == ID_preincrement ||
2631
+ expr.id () == ID_postdecrement || expr.id () == ID_predecrement)
2632
+ {
2633
+ convert_expr (expr.op ());
2634
+ expr.type () = expr.op ().type ();
2635
+ }
2636
+ else
2637
+ {
2638
+ throw errort () << " no conversion for unary expression " << expr.id ();
2639
+ }
2619
2640
2620
2641
return std::move (expr);
2621
2642
}
You can’t perform that action at this time.
0 commit comments