aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-01-15 17:02:34 +0100
committerTristan Gingold <tgingold@free.fr>2022-01-15 17:02:34 +0100
commit126333c7699f7e7e164118e4557472edf19cf61c (patch)
tree64ea2621d0b85540a13945234f44e68a8c2b6d12 /src
parentebd058ec722554f1809de7cdc6e4d1ed951acbe1 (diff)
downloadghdl-126333c7699f7e7e164118e4557472edf19cf61c.tar.gz
ghdl-126333c7699f7e7e164118e4557472edf19cf61c.tar.bz2
ghdl-126333c7699f7e7e164118e4557472edf19cf61c.zip
synth: do not annotate generic types in package. Fix #1949
Diffstat (limited to 'src')
-rw-r--r--src/synth/elab-vhdl_insts.adb30
-rw-r--r--src/vhdl/vhdl-annotations.adb5
2 files changed, 23 insertions, 12 deletions
diff --git a/src/synth/elab-vhdl_insts.adb b/src/synth/elab-vhdl_insts.adb
index cb7a6bd9e..404684c26 100644
--- a/src/synth/elab-vhdl_insts.adb
+++ b/src/synth/elab-vhdl_insts.adb
@@ -107,17 +107,25 @@ package body Elab.Vhdl_Insts is
end;
when Iir_Kind_Interface_Type_Declaration =>
- declare
- Act : Node;
- Act_Typ : Type_Acc;
- begin
- Act := Get_Actual (Assoc);
- if Get_Kind (Act) in Iir_Kinds_Denoting_Name then
- Act := Get_Type (Act);
- end if;
- Act_Typ := Synth_Subtype_Indication (Syn_Inst, Act);
- Create_Subtype_Object (Sub_Inst, Get_Type (Inter), Act_Typ);
- end;
+ if Get_Kind (Get_Parent (Inter)) = Iir_Kind_Entity_Declaration
+ then
+ declare
+ Act : Node;
+ Act_Typ : Type_Acc;
+ begin
+ Act := Get_Actual (Assoc);
+ if Get_Kind (Act) in Iir_Kinds_Denoting_Name then
+ Act := Get_Type (Act);
+ end if;
+ if Get_Kind (Act) in Iir_Kinds_Subtype_Definition then
+ Act_Typ := Synth_Subtype_Indication (Syn_Inst, Act);
+ else
+ Act_Typ := Get_Subtype_Object (Syn_Inst, Act);
+ end if;
+ Create_Subtype_Object
+ (Sub_Inst, Get_Type (Inter), Act_Typ);
+ end;
+ end if;
when Iir_Kind_Interface_Variable_Declaration
| Iir_Kind_Interface_File_Declaration
diff --git a/src/vhdl/vhdl-annotations.adb b/src/vhdl/vhdl-annotations.adb
index 71d43dfe1..630f3ef84 100644
--- a/src/vhdl/vhdl-annotations.adb
+++ b/src/vhdl/vhdl-annotations.adb
@@ -511,7 +511,10 @@ package body Vhdl.Annotations is
when Iir_Kind_Interface_Package_Declaration =>
Annotate_Interface_Package_Declaration (Block_Info, Decl);
when Iir_Kind_Interface_Type_Declaration =>
- if Flag_Synthesis then
+ if Flag_Synthesis
+ and then (Get_Kind (Get_Parent (Decl))
+ = Iir_Kind_Entity_Declaration)
+ then
-- Create an info on the interface_type_definition.
-- This is needed for a generic type in an entity, as the
-- nodes are not instantiated.