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 | |
parent | 72b5a66438052bf7e089b7f5ab1fee3462aa2a81 (diff) | |
download | ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.gz ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.bz2 ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.zip |
evaluation: weaken error for out of bound static value.
-rw-r--r-- | src/vhdl/translate/trans-chap3.adb | 8 | ||||
-rw-r--r-- | src/vhdl/translate/trans-chap6.adb | 10 | ||||
-rw-r--r-- | src/vhdl/vhdl-evaluation.adb | 3 | ||||
-rwxr-xr-x | testsuite/gna/sr3028/testsuite.sh | 2 |
4 files changed, 13 insertions, 10 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); diff --git a/src/vhdl/vhdl-evaluation.adb b/src/vhdl/vhdl-evaluation.adb index e33c2bea4..06c46684c 100644 --- a/src/vhdl/vhdl-evaluation.adb +++ b/src/vhdl/vhdl-evaluation.adb @@ -3576,7 +3576,8 @@ package body Vhdl.Evaluation is is begin if not Eval_Is_Range_In_Bound (A_Range, Sub_Type, Any_Dir) then - Error_Msg_Sem (+A_Range, "static range violates bounds"); + Warning_Msg_Sem (Warnid_Runtime_Error, +A_Range, + "static range violates bounds"); end if; end Eval_Check_Range; diff --git a/testsuite/gna/sr3028/testsuite.sh b/testsuite/gna/sr3028/testsuite.sh index 95ec1c6da..a49a430c1 100755 --- a/testsuite/gna/sr3028/testsuite.sh +++ b/testsuite/gna/sr3028/testsuite.sh @@ -2,7 +2,7 @@ . ../../testenv.sh -analyze_failure vc.vhdl +analyze_failure -Werror=runtime-error vc.vhdl clean |