diff options
author | Tristan Gingold <tgingold@free.fr> | 2020-04-22 21:31:33 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2020-04-22 21:31:33 +0200 |
commit | 0509e5ae98b1018ebcfe44240c6d71cec9cc6c52 (patch) | |
tree | 8a7d9dfdc42c95711b4bb2c1e7610483daf80867 /src/vhdl/translate | |
parent | 72b5a66438052bf7e089b7f5ab1fee3462aa2a81 (diff) | |
download | ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.gz ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.bz2 ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.zip |
evaluation: weaken error for out of bound static value.
Diffstat (limited to 'src/vhdl/translate')
-rw-r--r-- | src/vhdl/translate/trans-chap3.adb | 8 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap6.adb | 10 |
2 files changed, 10 insertions, 8 deletions
diff --git a/src/vhdl/translate/trans-chap3.adb b/src/vhdl/translate/trans-chap3.adb index 5583ee7b9..a0b6bd302 100644 --- a/src/vhdl/translate/trans-chap3.adb +++ b/src/vhdl/translate/trans-chap3.adb @@ -2065,13 +2065,13 @@ package body Trans.Chap3 is end; when Type_Mode_I32 => declare - V : Iir_Int32; + V : Int64; begin - V := Iir_Int32 (Get_Value (Lit)); + V := Get_Value (Lit); if Is_Hi then - return V = Iir_Int32'Last; + return V = Int64 (Iir_Int32'Last); else - return V = Iir_Int32'First; + return V = Int64 (Iir_Int32'First); end if; end; when Type_Mode_P32 => diff --git a/src/vhdl/translate/trans-chap6.adb b/src/vhdl/translate/trans-chap6.adb index ec632c815..7a272ed99 100644 --- a/src/vhdl/translate/trans-chap6.adb +++ b/src/vhdl/translate/trans-chap6.adb @@ -588,14 +588,16 @@ package body Trans.Chap6 is Off := Prefix_Left - Slice_Left; end case; if Off < 0 then - -- Must have been caught by sem. - raise Internal_Error; + Gen_Bound_Error (Index_Range); + Off := 0; + Slice_Length := 0; end if; if Off + Slice_Length > Eval_Discrete_Range_Length (Index_Range) then - -- Must have been caught by sem. - raise Internal_Error; + Gen_Bound_Error (Index_Range); + Off := 0; + Slice_Length := 0; end if; end if; Data.Off := Unsigned_64 (Off); |