aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl/translate/trans-chap3.adb
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2021-08-26 06:56:26 +0200
committerTristan Gingold <tgingold@free.fr>2021-08-26 06:56:26 +0200
commit01173c413da8d1d14b241cb3239cd72c70563887 (patch)
tree5e977088592e3a9948e27f005729d9de82df84a9 /src/vhdl/translate/trans-chap3.adb
parent243bb15efb6e7573a278f19b22eaffa43c399714 (diff)
downloadghdl-01173c413da8d1d14b241cb3239cd72c70563887.tar.gz
ghdl-01173c413da8d1d14b241cb3239cd72c70563887.tar.bz2
ghdl-01173c413da8d1d14b241cb3239cd72c70563887.zip
vhdl-evaluation: check integer evaluations fit in base type. Fix #1834
Diffstat (limited to 'src/vhdl/translate/trans-chap3.adb')
-rw-r--r--src/vhdl/translate/trans-chap3.adb13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/vhdl/translate/trans-chap3.adb b/src/vhdl/translate/trans-chap3.adb
index e782d2d11..7f135a748 100644
--- a/src/vhdl/translate/trans-chap3.adb
+++ b/src/vhdl/translate/trans-chap3.adb
@@ -2223,10 +2223,15 @@ package body Trans.Chap3 is
else
-- Bounds are locally static.
Get_Low_High_Limit (Rng, Lo, Hi);
- Subtype_Info.S.Nocheck_Hi :=
- Is_Equal_Limit (Hi, True, Def, Base_Info.Type_Mode);
- Subtype_Info.S.Nocheck_Low :=
- Is_Equal_Limit (Lo, False, Def, Base_Info.Type_Mode);
+ if Is_Overflow_Literal (Hi) or else Is_Overflow_Literal (Lo) then
+ Subtype_Info.S.Nocheck_Hi := True;
+ Subtype_Info.S.Nocheck_Low := True;
+ else
+ Subtype_Info.S.Nocheck_Hi :=
+ Is_Equal_Limit (Hi, True, Def, Base_Info.Type_Mode);
+ Subtype_Info.S.Nocheck_Low :=
+ Is_Equal_Limit (Lo, False, Def, Base_Info.Type_Mode);
+ end if;
end if;
end Create_Subtype_Info_From_Type;