diff options
author | Tristan Gingold <tgingold@free.fr> | 2023-01-16 18:55:17 +0100 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2023-01-16 18:57:52 +0100 |
commit | 27812b602d2dfc452895c156bf0376bdcda71c8c (patch) | |
tree | eeee76c0b09ea50e9ab95a72e12506ccaf661a2f | |
parent | 47def2be73f1a5f27f2c46db8cbc5a350f0f549e (diff) | |
download | ghdl-27812b602d2dfc452895c156bf0376bdcda71c8c.tar.gz ghdl-27812b602d2dfc452895c156bf0376bdcda71c8c.tar.bz2 ghdl-27812b602d2dfc452895c156bf0376bdcda71c8c.zip |
synth-vhdl_eval: add an overflow check
-rw-r--r-- | src/synth/synth-vhdl_eval.adb | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/synth/synth-vhdl_eval.adb b/src/synth/synth-vhdl_eval.adb index 5b4728c4d..c96e24721 100644 --- a/src/synth/synth-vhdl_eval.adb +++ b/src/synth/synth-vhdl_eval.adb @@ -1176,6 +1176,7 @@ package body Synth.Vhdl_Eval is Lv : Ghdl_I64; Rv : Std_Integer; Res : Ghdl_I64; + R : Int64; Ovf : Boolean; begin Lv := Ghdl_I64 (Read_Discrete (Param1)); @@ -1183,9 +1184,12 @@ package body Synth.Vhdl_Eval is Grt.Arith.Exp_I64 (Lv, Rv, Res, Ovf); if Ovf then Error_Msg_Synth (Inst, Expr, "exponentiation overflow"); - Res := 0; + R := 0; + else + R := Int64 (Res); + Check_Integer_Overflow (Inst, R, Res_Typ, Expr); end if; - return Create_Memory_Discrete (Int64 (Res), Res_Typ); + return Create_Memory_Discrete (R, Res_Typ); end; when Iir_Predefined_Integer_Less_Equal |