aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2020-01-12 10:11:56 +0100
committerTristan Gingold <tgingold@free.fr>2020-01-12 10:11:56 +0100
commit684e6311e46067d104650713c611a934f287ee5d (patch)
tree5269bdc0639dad5f84eab6b4971215955337f427 /src
parent7da5c8b0aeca0f824ac7af99dbcdb205d6e1f155 (diff)
downloadghdl-684e6311e46067d104650713c611a934f287ee5d.tar.gz
ghdl-684e6311e46067d104650713c611a934f287ee5d.tar.bz2
ghdl-684e6311e46067d104650713c611a934f287ee5d.zip
synth: handle constants in assignments. Fix for #1080
Diffstat (limited to 'src')
-rw-r--r--src/synth/synth-stmts.adb2
-rw-r--r--src/synth/synth-values.adb9
-rw-r--r--src/synth/synth-values.ads1
3 files changed, 11 insertions, 1 deletions
diff --git a/src/synth/synth-stmts.adb b/src/synth/synth-stmts.adb
index 964bc5d92..d5917eb42 100644
--- a/src/synth/synth-stmts.adb
+++ b/src/synth/synth-stmts.adb
@@ -479,7 +479,7 @@ package body Synth.Stmts is
(+Loc, "cannot assign a net to a static value");
else
pragma Assert (Target.Off = 0);
- Assign_Value (Target.Obj, Val, Loc);
+ Assign_Value (Target.Obj, Strip_Const (Val), Loc);
end if;
end if;
when Target_Memory =>
diff --git a/src/synth/synth-values.adb b/src/synth/synth-values.adb
index 7bbc562ac..9eb6c324c 100644
--- a/src/synth/synth-values.adb
+++ b/src/synth/synth-values.adb
@@ -707,6 +707,15 @@ package body Synth.Values is
end if;
end Strip_Const;
+ function Strip_Const (Val : Value_Acc) return Value_Acc is
+ begin
+ if Val.Kind = Value_Const then
+ return Val.C_Val;
+ else
+ return Val;
+ end if;
+ end Strip_Const;
+
function Copy (Src : Value_Acc) return Value_Acc;
function Copy_Array (Arr : Value_Array_Acc) return Value_Array_Acc
diff --git a/src/synth/synth-values.ads b/src/synth/synth-values.ads
index 93f298720..a9a127ec8 100644
--- a/src/synth/synth-values.ads
+++ b/src/synth/synth-values.ads
@@ -334,6 +334,7 @@ package Synth.Values is
-- If VAL is a const, replace it by its value.
procedure Strip_Const (Val : in out Value_Acc);
+ function Strip_Const (Val : Value_Acc) return Value_Acc;
function Unshare (Src : Value_Acc; Pool : Areapool_Acc)
return Value_Acc;