diff options
author | Tristan Gingold <tgingold@free.fr> | 2021-08-26 06:56:26 +0200 |
---|---|---|
committer | Tristan Gingold <tgingold@free.fr> | 2021-08-26 06:56:26 +0200 |
commit | 01173c413da8d1d14b241cb3239cd72c70563887 (patch) | |
tree | 5e977088592e3a9948e27f005729d9de82df84a9 /src/vhdl/translate/trans-chap3.adb | |
parent | 243bb15efb6e7573a278f19b22eaffa43c399714 (diff) | |
download | ghdl-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.adb | 13 |
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; |