aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-04-22 21:31:33 +0200
committerTristan Gingold <tgingold@free.fr>2020-04-22 21:31:33 +0200
commit0509e5ae98b1018ebcfe44240c6d71cec9cc6c52 (patch)
tree8a7d9dfdc42c95711b4bb2c1e7610483daf80867 /src/vhdl
parent72b5a66438052bf7e089b7f5ab1fee3462aa2a81 (diff)
downloadghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.gz
ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.tar.bz2
ghdl-0509e5ae98b1018ebcfe44240c6d71cec9cc6c52.zip
evaluation: weaken error for out of bound static value.
Diffstat (limited to 'src/vhdl')
-rw-r--r--src/vhdl/translate/trans-chap3.adb8
-rw-r--r--src/vhdl/translate/trans-chap6.adb10
-rw-r--r--src/vhdl/vhdl-evaluation.adb3
3 files changed, 12 insertions, 9 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;