While compiling someone else's verilog, I received the below icarus assertion error for some verilog that tries to pass an expression involving time as an argument to a task. The original code looked like "my_task( timeval - $realtime)", I found I could work around this assertion by assigning the time calculation to a temporary variable, and then passing the variable to the task. I'm using a tarball build of the 0.9.5 release, but the problem also appears in prior releases (eg, 0.9.2). The attached example shows a minimal version of the problem, plus an example of how to fix it. I'm not positive the verilog is legitimate, but it did compile ok under Riviera a couple years ago.
iverilog -o example task_time_arg.v
ivl: eval_expr.c:2736: draw_sfunc_expr: Assertion `ivl_expr_value(expr) == IVL_VT_LOGIC || ivl_expr_value(expr) == IVL_VT_BOOL' failed.
sh: line 1: 25853 Done /opt/verilog-0.9.5/lib/ivl/ivlpp -L -F"/tmp/ivrlg27a6b7bb3" -f"/tmp/ivrlg7a6b7bb3" -p"/tmp/ivrli7a6b7bb3"
25854 Aborted (core dumped) | /opt/verilog-0.9.5/lib/ivl/ivl -C"/tmp/ivrlh7a6b7bb3" -C"/opt/verilog-0.9.5/lib/ivl/vvp.conf" -- -
Ps- you've done a great job with Icarus