diff options
-rw-r--r-- | src/vhdl/simulate/simul-execution.adb | 3 | ||||
-rw-r--r-- | src/vhdl/simulate/simul-simulation.adb | 4 | ||||
-rwxr-xr-x | testsuite/gna/issue26/testsuite.sh | 2 |
3 files changed, 6 insertions, 3 deletions
diff --git a/src/vhdl/simulate/simul-execution.adb b/src/vhdl/simulate/simul-execution.adb index b7888608b..e18016c21 100644 --- a/src/vhdl/simulate/simul-execution.adb +++ b/src/vhdl/simulate/simul-execution.adb @@ -4638,8 +4638,7 @@ package body Simul.Execution is Release (Proc.Instance.Marker, Instance_Pool.all); end Finish_Procedure_Frame; - procedure Execute_If_Statement - (Proc : Process_State_Acc; Stmt: Iir_Wait_Statement) + procedure Execute_If_Statement (Proc : Process_State_Acc; Stmt : Iir) is Clause: Iir; Cond: Boolean; diff --git a/src/vhdl/simulate/simul-simulation.adb b/src/vhdl/simulate/simul-simulation.adb index 5b7035c3f..a674fa784 100644 --- a/src/vhdl/simulate/simul-simulation.adb +++ b/src/vhdl/simulate/simul-simulation.adb @@ -18,6 +18,7 @@ with Types; use Types; with Simul.Execution; use Simul.Execution; +with Simul.Debugger; use Simul.Debugger; with Areapools; use Areapools; with Grt.Signals; with Grt.Processes; @@ -524,6 +525,9 @@ package body Simul.Simulation is Expr := Get_Timeout_Clause (Stmt); if Expr /= Null_Iir then Res := Execute_Expression (Instance, Expr); + if Res.I64 < 0 then + Error_Msg_Exec ("negative timeout clause", Stmt); + end if; Grt.Processes.Ghdl_Process_Wait_Set_Timeout (Std_Time (Res.I64), null, 0); end if; diff --git a/testsuite/gna/issue26/testsuite.sh b/testsuite/gna/issue26/testsuite.sh index 467230316..46b5352c7 100755 --- a/testsuite/gna/issue26/testsuite.sh +++ b/testsuite/gna/issue26/testsuite.sh @@ -3,7 +3,7 @@ . ../../testenv.sh analyze repro.vhdl -elab_simulate_failure time_travel > sim.err +elab_simulate_failure time_travel > sim.err 2>&1 if ! grep -q '11' sim.err; then echo "missing line number" exit 1 |