aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-12-24 08:16:22 +0100
committerTristan Gingold <tgingold@free.fr>2016-12-24 08:16:22 +0100
commit085c178cdaff2f52f2c465108786d936c9932d86 (patch)
treed6c05755f29f86d0ac0facfa6e0110d3b45f50fa
parente7e5ee5d770a33b11106e4833279f7cc4c0d394e (diff)
downloadghdl-085c178cdaff2f52f2c465108786d936c9932d86.tar.gz
ghdl-085c178cdaff2f52f2c465108786d936c9932d86.tar.bz2
ghdl-085c178cdaff2f52f2c465108786d936c9932d86.zip
Fixes for nodes_gc
-rw-r--r--src/vhdl/canon.adb19
-rw-r--r--src/vhdl/evaluation.adb2
-rw-r--r--src/vhdl/iirs.ads4
-rw-r--r--src/vhdl/nodes_meta.adb504
-rw-r--r--src/vhdl/sem_inst.adb1
-rw-r--r--src/vhdl/sem_specs.adb9
6 files changed, 286 insertions, 253 deletions
diff --git a/src/vhdl/canon.adb b/src/vhdl/canon.adb
index 9a2e8dd6e..0304aea9a 100644
--- a/src/vhdl/canon.adb
+++ b/src/vhdl/canon.adb
@@ -2307,11 +2307,28 @@ package body Canon is
(Assoc : in out Iir; Inter : in out Iir; Copy_Inter : Iir)
is
El : Iir;
+ Formal : Iir;
begin
loop
El := Create_Iir (Get_Kind (Assoc));
Location_Copy (El, Assoc);
- Set_Formal (El, Sem_Inst.Copy_Tree (Get_Formal (Assoc)));
+
+ -- Copy formal.
+ -- Special case: formal comes from a default binding
+ -- indication. In that case Is_Forward_Ref is set, which makes
+ -- it non-copiable by Sem_Inst.
+ Formal := Get_Formal (Assoc);
+ if Is_Valid (Formal) then
+ if Get_Kind (Formal) = Iir_Kind_Simple_Name
+ and then Get_Is_Forward_Ref (Formal)
+ then
+ Formal := Build_Simple_Name
+ (Get_Named_Entity (Formal), Formal);
+ else
+ Formal := Sem_Inst.Copy_Tree (Formal);
+ end if;
+ end if;
+ Set_Formal (El, Formal);
Set_Whole_Association_Flag
(El, Get_Whole_Association_Flag (Assoc));
diff --git a/src/vhdl/evaluation.adb b/src/vhdl/evaluation.adb
index 201ad1e95..7bd169366 100644
--- a/src/vhdl/evaluation.adb
+++ b/src/vhdl/evaluation.adb
@@ -573,7 +573,7 @@ package body Evaluation is
if Get_Kind (Get_Type (Expr))
in Iir_Kinds_Scalar_Type_Definition
then
- Expr := Eval_Static_Expr (Expr);
+ Expr := Eval_Expr_Keep_Orig (Expr, True);
Set_Associated_Expr (Assoc, Expr);
end if;
end if;
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index 487fc17af..065658e8b 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -411,6 +411,10 @@ package Iirs is
-- Iir_Kind_Unaffected_Waveform (Short)
-- The 'unaffected' reserved word when it appears in the sources.
+ --
+ -- Unaffected replaces a waveform element, so it is considered to be part
+ -- of a chain. But it is always alone in the chain.
+ -- Get/Set_Chain (Field2)
-------------
-- Tuples --
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index d873669c8..385c1261c 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -2292,6 +2292,7 @@ package body Nodes_Meta is
Field_Literal_Origin,
Field_Type,
-- Iir_Kind_Unaffected_Waveform
+ Field_Chain,
-- Iir_Kind_Waveform_Element
Field_We_Value,
Field_Time,
@@ -4340,257 +4341,257 @@ package body Nodes_Meta is
Iir_Kind_Physical_Fp_Literal => 79,
Iir_Kind_Simple_Aggregate => 84,
Iir_Kind_Overflow_Literal => 87,
- Iir_Kind_Unaffected_Waveform => 87,
- Iir_Kind_Waveform_Element => 90,
- Iir_Kind_Conditional_Waveform => 93,
- Iir_Kind_Conditional_Expression => 96,
- Iir_Kind_Association_Element_By_Expression => 103,
- Iir_Kind_Association_Element_By_Individual => 111,
- Iir_Kind_Association_Element_Open => 116,
- Iir_Kind_Association_Element_Package => 121,
- Iir_Kind_Association_Element_Type => 128,
- Iir_Kind_Association_Element_Subprogram => 133,
- Iir_Kind_Choice_By_Range => 140,
- Iir_Kind_Choice_By_Expression => 147,
- Iir_Kind_Choice_By_Others => 152,
- Iir_Kind_Choice_By_None => 157,
- Iir_Kind_Choice_By_Name => 163,
- Iir_Kind_Entity_Aspect_Entity => 165,
- Iir_Kind_Entity_Aspect_Configuration => 166,
- Iir_Kind_Entity_Aspect_Open => 166,
- Iir_Kind_Block_Configuration => 172,
- Iir_Kind_Block_Header => 176,
- Iir_Kind_Component_Configuration => 183,
- Iir_Kind_Binding_Indication => 187,
- Iir_Kind_Entity_Class => 189,
- Iir_Kind_Attribute_Value => 197,
- Iir_Kind_Signature => 200,
- Iir_Kind_Aggregate_Info => 207,
- Iir_Kind_Procedure_Call => 211,
- Iir_Kind_Record_Element_Constraint => 217,
- Iir_Kind_Array_Element_Resolution => 219,
- Iir_Kind_Record_Resolution => 220,
- Iir_Kind_Record_Element_Resolution => 223,
- Iir_Kind_Attribute_Specification => 231,
- Iir_Kind_Disconnection_Specification => 237,
- Iir_Kind_Configuration_Specification => 243,
- Iir_Kind_Access_Type_Definition => 251,
- Iir_Kind_Incomplete_Type_Definition => 259,
- Iir_Kind_Interface_Type_Definition => 266,
- Iir_Kind_File_Type_Definition => 273,
- Iir_Kind_Protected_Type_Declaration => 282,
- Iir_Kind_Record_Type_Definition => 292,
- Iir_Kind_Array_Type_Definition => 304,
- Iir_Kind_Array_Subtype_Definition => 319,
- Iir_Kind_Record_Subtype_Definition => 330,
- Iir_Kind_Access_Subtype_Definition => 338,
- Iir_Kind_Physical_Subtype_Definition => 348,
- Iir_Kind_Floating_Subtype_Definition => 359,
- Iir_Kind_Integer_Subtype_Definition => 369,
- Iir_Kind_Enumeration_Subtype_Definition => 379,
- Iir_Kind_Enumeration_Type_Definition => 389,
- Iir_Kind_Integer_Type_Definition => 397,
- Iir_Kind_Floating_Type_Definition => 405,
- Iir_Kind_Physical_Type_Definition => 416,
- Iir_Kind_Range_Expression => 424,
- Iir_Kind_Protected_Type_Body => 431,
- Iir_Kind_Wildcard_Type_Definition => 436,
- Iir_Kind_Subtype_Definition => 441,
- Iir_Kind_Scalar_Nature_Definition => 445,
- Iir_Kind_Overload_List => 446,
- Iir_Kind_Type_Declaration => 453,
- Iir_Kind_Anonymous_Type_Declaration => 459,
- Iir_Kind_Subtype_Declaration => 466,
- Iir_Kind_Nature_Declaration => 472,
- Iir_Kind_Subnature_Declaration => 478,
- Iir_Kind_Package_Declaration => 492,
- Iir_Kind_Package_Instantiation_Declaration => 505,
- Iir_Kind_Package_Body => 513,
- Iir_Kind_Configuration_Declaration => 522,
- Iir_Kind_Entity_Declaration => 534,
- Iir_Kind_Architecture_Body => 546,
- Iir_Kind_Context_Declaration => 552,
- Iir_Kind_Package_Header => 554,
- Iir_Kind_Unit_Declaration => 562,
- Iir_Kind_Library_Declaration => 569,
- Iir_Kind_Component_Declaration => 579,
- Iir_Kind_Attribute_Declaration => 586,
- Iir_Kind_Group_Template_Declaration => 592,
- Iir_Kind_Group_Declaration => 599,
- Iir_Kind_Element_Declaration => 606,
- Iir_Kind_Non_Object_Alias_Declaration => 614,
- Iir_Kind_Psl_Declaration => 622,
- Iir_Kind_Psl_Endpoint_Declaration => 636,
- Iir_Kind_Terminal_Declaration => 642,
- Iir_Kind_Free_Quantity_Declaration => 651,
- Iir_Kind_Across_Quantity_Declaration => 663,
- Iir_Kind_Through_Quantity_Declaration => 675,
- Iir_Kind_Enumeration_Literal => 686,
- Iir_Kind_Function_Declaration => 711,
- Iir_Kind_Procedure_Declaration => 735,
- Iir_Kind_Function_Body => 745,
- Iir_Kind_Procedure_Body => 756,
- Iir_Kind_Object_Alias_Declaration => 767,
- Iir_Kind_File_Declaration => 781,
- Iir_Kind_Guard_Signal_Declaration => 794,
- Iir_Kind_Signal_Declaration => 811,
- Iir_Kind_Variable_Declaration => 824,
- Iir_Kind_Constant_Declaration => 838,
- Iir_Kind_Iterator_Declaration => 849,
- Iir_Kind_Interface_Constant_Declaration => 865,
- Iir_Kind_Interface_Variable_Declaration => 881,
- Iir_Kind_Interface_Signal_Declaration => 902,
- Iir_Kind_Interface_File_Declaration => 918,
- Iir_Kind_Interface_Type_Declaration => 928,
- Iir_Kind_Interface_Package_Declaration => 939,
- Iir_Kind_Interface_Function_Declaration => 956,
- Iir_Kind_Interface_Procedure_Declaration => 969,
- Iir_Kind_Signal_Attribute_Declaration => 972,
- Iir_Kind_Identity_Operator => 976,
- Iir_Kind_Negation_Operator => 980,
- Iir_Kind_Absolute_Operator => 984,
- Iir_Kind_Not_Operator => 988,
- Iir_Kind_Condition_Operator => 992,
- Iir_Kind_Reduction_And_Operator => 996,
- Iir_Kind_Reduction_Or_Operator => 1000,
- Iir_Kind_Reduction_Nand_Operator => 1004,
- Iir_Kind_Reduction_Nor_Operator => 1008,
- Iir_Kind_Reduction_Xor_Operator => 1012,
- Iir_Kind_Reduction_Xnor_Operator => 1016,
- Iir_Kind_And_Operator => 1021,
- Iir_Kind_Or_Operator => 1026,
- Iir_Kind_Nand_Operator => 1031,
- Iir_Kind_Nor_Operator => 1036,
- Iir_Kind_Xor_Operator => 1041,
- Iir_Kind_Xnor_Operator => 1046,
- Iir_Kind_Equality_Operator => 1051,
- Iir_Kind_Inequality_Operator => 1056,
- Iir_Kind_Less_Than_Operator => 1061,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1066,
- Iir_Kind_Greater_Than_Operator => 1071,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1076,
- Iir_Kind_Match_Equality_Operator => 1081,
- Iir_Kind_Match_Inequality_Operator => 1086,
- Iir_Kind_Match_Less_Than_Operator => 1091,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1096,
- Iir_Kind_Match_Greater_Than_Operator => 1101,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1106,
- Iir_Kind_Sll_Operator => 1111,
- Iir_Kind_Sla_Operator => 1116,
- Iir_Kind_Srl_Operator => 1121,
- Iir_Kind_Sra_Operator => 1126,
- Iir_Kind_Rol_Operator => 1131,
- Iir_Kind_Ror_Operator => 1136,
- Iir_Kind_Addition_Operator => 1141,
- Iir_Kind_Substraction_Operator => 1146,
- Iir_Kind_Concatenation_Operator => 1151,
- Iir_Kind_Multiplication_Operator => 1156,
- Iir_Kind_Division_Operator => 1161,
- Iir_Kind_Modulus_Operator => 1166,
- Iir_Kind_Remainder_Operator => 1171,
- Iir_Kind_Exponentiation_Operator => 1176,
- Iir_Kind_Function_Call => 1184,
- Iir_Kind_Aggregate => 1191,
- Iir_Kind_Parenthesis_Expression => 1194,
- Iir_Kind_Qualified_Expression => 1198,
- Iir_Kind_Type_Conversion => 1203,
- Iir_Kind_Allocator_By_Expression => 1207,
- Iir_Kind_Allocator_By_Subtype => 1212,
- Iir_Kind_Selected_Element => 1218,
- Iir_Kind_Dereference => 1223,
- Iir_Kind_Implicit_Dereference => 1228,
- Iir_Kind_Slice_Name => 1235,
- Iir_Kind_Indexed_Name => 1241,
- Iir_Kind_Psl_Expression => 1243,
- Iir_Kind_Sensitized_Process_Statement => 1264,
- Iir_Kind_Process_Statement => 1284,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1295,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1306,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1318,
- Iir_Kind_Concurrent_Assertion_Statement => 1326,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1333,
- Iir_Kind_Psl_Assert_Statement => 1346,
- Iir_Kind_Psl_Cover_Statement => 1359,
- Iir_Kind_Block_Statement => 1372,
- Iir_Kind_If_Generate_Statement => 1382,
- Iir_Kind_Case_Generate_Statement => 1391,
- Iir_Kind_For_Generate_Statement => 1400,
- Iir_Kind_Component_Instantiation_Statement => 1410,
- Iir_Kind_Psl_Default_Clock => 1414,
- Iir_Kind_Simple_Simultaneous_Statement => 1421,
- Iir_Kind_Generate_Statement_Body => 1432,
- Iir_Kind_If_Generate_Else_Clause => 1437,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1446,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1455,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1465,
- Iir_Kind_Null_Statement => 1469,
- Iir_Kind_Assertion_Statement => 1476,
- Iir_Kind_Report_Statement => 1482,
- Iir_Kind_Wait_Statement => 1490,
- Iir_Kind_Variable_Assignment_Statement => 1496,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1502,
- Iir_Kind_Return_Statement => 1508,
- Iir_Kind_For_Loop_Statement => 1517,
- Iir_Kind_While_Loop_Statement => 1525,
- Iir_Kind_Next_Statement => 1531,
- Iir_Kind_Exit_Statement => 1537,
- Iir_Kind_Case_Statement => 1545,
- Iir_Kind_Procedure_Call_Statement => 1551,
- Iir_Kind_If_Statement => 1560,
- Iir_Kind_Elsif => 1565,
- Iir_Kind_Character_Literal => 1573,
- Iir_Kind_Simple_Name => 1581,
- Iir_Kind_Selected_Name => 1590,
- Iir_Kind_Operator_Symbol => 1596,
- Iir_Kind_Reference_Name => 1599,
- Iir_Kind_Selected_By_All_Name => 1605,
- Iir_Kind_Parenthesis_Name => 1610,
- Iir_Kind_External_Constant_Name => 1618,
- Iir_Kind_External_Signal_Name => 1626,
- Iir_Kind_External_Variable_Name => 1634,
- Iir_Kind_Package_Pathname => 1638,
- Iir_Kind_Absolute_Pathname => 1639,
- Iir_Kind_Relative_Pathname => 1640,
- Iir_Kind_Pathname_Element => 1645,
- Iir_Kind_Base_Attribute => 1647,
- Iir_Kind_Left_Type_Attribute => 1652,
- Iir_Kind_Right_Type_Attribute => 1657,
- Iir_Kind_High_Type_Attribute => 1662,
- Iir_Kind_Low_Type_Attribute => 1667,
- Iir_Kind_Ascending_Type_Attribute => 1672,
- Iir_Kind_Image_Attribute => 1678,
- Iir_Kind_Value_Attribute => 1684,
- Iir_Kind_Pos_Attribute => 1690,
- Iir_Kind_Val_Attribute => 1696,
- Iir_Kind_Succ_Attribute => 1702,
- Iir_Kind_Pred_Attribute => 1708,
- Iir_Kind_Leftof_Attribute => 1714,
- Iir_Kind_Rightof_Attribute => 1720,
- Iir_Kind_Delayed_Attribute => 1729,
- Iir_Kind_Stable_Attribute => 1738,
- Iir_Kind_Quiet_Attribute => 1747,
- Iir_Kind_Transaction_Attribute => 1756,
- Iir_Kind_Event_Attribute => 1760,
- Iir_Kind_Active_Attribute => 1764,
- Iir_Kind_Last_Event_Attribute => 1768,
- Iir_Kind_Last_Active_Attribute => 1772,
- Iir_Kind_Last_Value_Attribute => 1776,
- Iir_Kind_Driving_Attribute => 1780,
- Iir_Kind_Driving_Value_Attribute => 1784,
- Iir_Kind_Behavior_Attribute => 1784,
- Iir_Kind_Structure_Attribute => 1784,
- Iir_Kind_Simple_Name_Attribute => 1791,
- Iir_Kind_Instance_Name_Attribute => 1796,
- Iir_Kind_Path_Name_Attribute => 1801,
- Iir_Kind_Left_Array_Attribute => 1808,
- Iir_Kind_Right_Array_Attribute => 1815,
- Iir_Kind_High_Array_Attribute => 1822,
- Iir_Kind_Low_Array_Attribute => 1829,
- Iir_Kind_Length_Array_Attribute => 1836,
- Iir_Kind_Ascending_Array_Attribute => 1843,
- Iir_Kind_Range_Array_Attribute => 1850,
- Iir_Kind_Reverse_Range_Array_Attribute => 1857,
- Iir_Kind_Attribute_Name => 1866
+ Iir_Kind_Unaffected_Waveform => 88,
+ Iir_Kind_Waveform_Element => 91,
+ Iir_Kind_Conditional_Waveform => 94,
+ Iir_Kind_Conditional_Expression => 97,
+ Iir_Kind_Association_Element_By_Expression => 104,
+ Iir_Kind_Association_Element_By_Individual => 112,
+ Iir_Kind_Association_Element_Open => 117,
+ Iir_Kind_Association_Element_Package => 122,
+ Iir_Kind_Association_Element_Type => 129,
+ Iir_Kind_Association_Element_Subprogram => 134,
+ Iir_Kind_Choice_By_Range => 141,
+ Iir_Kind_Choice_By_Expression => 148,
+ Iir_Kind_Choice_By_Others => 153,
+ Iir_Kind_Choice_By_None => 158,
+ Iir_Kind_Choice_By_Name => 164,
+ Iir_Kind_Entity_Aspect_Entity => 166,
+ Iir_Kind_Entity_Aspect_Configuration => 167,
+ Iir_Kind_Entity_Aspect_Open => 167,
+ Iir_Kind_Block_Configuration => 173,
+ Iir_Kind_Block_Header => 177,
+ Iir_Kind_Component_Configuration => 184,
+ Iir_Kind_Binding_Indication => 188,
+ Iir_Kind_Entity_Class => 190,
+ Iir_Kind_Attribute_Value => 198,
+ Iir_Kind_Signature => 201,
+ Iir_Kind_Aggregate_Info => 208,
+ Iir_Kind_Procedure_Call => 212,
+ Iir_Kind_Record_Element_Constraint => 218,
+ Iir_Kind_Array_Element_Resolution => 220,
+ Iir_Kind_Record_Resolution => 221,
+ Iir_Kind_Record_Element_Resolution => 224,
+ Iir_Kind_Attribute_Specification => 232,
+ Iir_Kind_Disconnection_Specification => 238,
+ Iir_Kind_Configuration_Specification => 244,
+ Iir_Kind_Access_Type_Definition => 252,
+ Iir_Kind_Incomplete_Type_Definition => 260,
+ Iir_Kind_Interface_Type_Definition => 267,
+ Iir_Kind_File_Type_Definition => 274,
+ Iir_Kind_Protected_Type_Declaration => 283,
+ Iir_Kind_Record_Type_Definition => 293,
+ Iir_Kind_Array_Type_Definition => 305,
+ Iir_Kind_Array_Subtype_Definition => 320,
+ Iir_Kind_Record_Subtype_Definition => 331,
+ Iir_Kind_Access_Subtype_Definition => 339,
+ Iir_Kind_Physical_Subtype_Definition => 349,
+ Iir_Kind_Floating_Subtype_Definition => 360,
+ Iir_Kind_Integer_Subtype_Definition => 370,
+ Iir_Kind_Enumeration_Subtype_Definition => 380,
+ Iir_Kind_Enumeration_Type_Definition => 390,
+ Iir_Kind_Integer_Type_Definition => 398,
+ Iir_Kind_Floating_Type_Definition => 406,
+ Iir_Kind_Physical_Type_Definition => 417,
+ Iir_Kind_Range_Expression => 425,
+ Iir_Kind_Protected_Type_Body => 432,
+ Iir_Kind_Wildcard_Type_Definition => 437,
+ Iir_Kind_Subtype_Definition => 442,
+ Iir_Kind_Scalar_Nature_Definition => 446,
+ Iir_Kind_Overload_List => 447,
+ Iir_Kind_Type_Declaration => 454,
+ Iir_Kind_Anonymous_Type_Declaration => 460,
+ Iir_Kind_Subtype_Declaration => 467,
+ Iir_Kind_Nature_Declaration => 473,
+ Iir_Kind_Subnature_Declaration => 479,
+ Iir_Kind_Package_Declaration => 493,
+ Iir_Kind_Package_Instantiation_Declaration => 506,
+ Iir_Kind_Package_Body => 514,
+ Iir_Kind_Configuration_Declaration => 523,
+ Iir_Kind_Entity_Declaration => 535,
+ Iir_Kind_Architecture_Body => 547,
+ Iir_Kind_Context_Declaration => 553,
+ Iir_Kind_Package_Header => 555,
+ Iir_Kind_Unit_Declaration => 563,
+ Iir_Kind_Library_Declaration => 570,
+ Iir_Kind_Component_Declaration => 580,
+ Iir_Kind_Attribute_Declaration => 587,
+ Iir_Kind_Group_Template_Declaration => 593,
+ Iir_Kind_Group_Declaration => 600,
+ Iir_Kind_Element_Declaration => 607,
+ Iir_Kind_Non_Object_Alias_Declaration => 615,
+ Iir_Kind_Psl_Declaration => 623,
+ Iir_Kind_Psl_Endpoint_Declaration => 637,
+ Iir_Kind_Terminal_Declaration => 643,
+ Iir_Kind_Free_Quantity_Declaration => 652,
+ Iir_Kind_Across_Quantity_Declaration => 664,
+ Iir_Kind_Through_Quantity_Declaration => 676,
+ Iir_Kind_Enumeration_Literal => 687,
+ Iir_Kind_Function_Declaration => 712,
+ Iir_Kind_Procedure_Declaration => 736,
+ Iir_Kind_Function_Body => 746,
+ Iir_Kind_Procedure_Body => 757,
+ Iir_Kind_Object_Alias_Declaration => 768,
+ Iir_Kind_File_Declaration => 782,
+ Iir_Kind_Guard_Signal_Declaration => 795,
+ Iir_Kind_Signal_Declaration => 812,
+ Iir_Kind_Variable_Declaration => 825,
+ Iir_Kind_Constant_Declaration => 839,
+ Iir_Kind_Iterator_Declaration => 850,
+ Iir_Kind_Interface_Constant_Declaration => 866,
+ Iir_Kind_Interface_Variable_Declaration => 882,
+ Iir_Kind_Interface_Signal_Declaration => 903,
+ Iir_Kind_Interface_File_Declaration => 919,
+ Iir_Kind_Interface_Type_Declaration => 929,
+ Iir_Kind_Interface_Package_Declaration => 940,
+ Iir_Kind_Interface_Function_Declaration => 957,
+ Iir_Kind_Interface_Procedure_Declaration => 970,
+ Iir_Kind_Signal_Attribute_Declaration => 973,
+ Iir_Kind_Identity_Operator => 977,
+ Iir_Kind_Negation_Operator => 981,
+ Iir_Kind_Absolute_Operator => 985,
+ Iir_Kind_Not_Operator => 989,
+ Iir_Kind_Condition_Operator => 993,
+ Iir_Kind_Reduction_And_Operator => 997,
+ Iir_Kind_Reduction_Or_Operator => 1001,
+ Iir_Kind_Reduction_Nand_Operator => 1005,
+ Iir_Kind_Reduction_Nor_Operator => 1009,
+ Iir_Kind_Reduction_Xor_Operator => 1013,
+ Iir_Kind_Reduction_Xnor_Operator => 1017,
+ Iir_Kind_And_Operator => 1022,
+ Iir_Kind_Or_Operator => 1027,
+ Iir_Kind_Nand_Operator => 1032,
+ Iir_Kind_Nor_Operator => 1037,
+ Iir_Kind_Xor_Operator => 1042,
+ Iir_Kind_Xnor_Operator => 1047,
+ Iir_Kind_Equality_Operator => 1052,
+ Iir_Kind_Inequality_Operator => 1057,
+ Iir_Kind_Less_Than_Operator => 1062,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1067,
+ Iir_Kind_Greater_Than_Operator => 1072,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1077,
+ Iir_Kind_Match_Equality_Operator => 1082,
+ Iir_Kind_Match_Inequality_Operator => 1087,
+ Iir_Kind_Match_Less_Than_Operator => 1092,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1097,
+ Iir_Kind_Match_Greater_Than_Operator => 1102,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1107,
+ Iir_Kind_Sll_Operator => 1112,
+ Iir_Kind_Sla_Operator => 1117,
+ Iir_Kind_Srl_Operator => 1122,
+ Iir_Kind_Sra_Operator => 1127,
+ Iir_Kind_Rol_Operator => 1132,
+ Iir_Kind_Ror_Operator => 1137,
+ Iir_Kind_Addition_Operator => 1142,
+ Iir_Kind_Substraction_Operator => 1147,
+ Iir_Kind_Concatenation_Operator => 1152,
+ Iir_Kind_Multiplication_Operator => 1157,
+ Iir_Kind_Division_Operator => 1162,
+ Iir_Kind_Modulus_Operator => 1167,
+ Iir_Kind_Remainder_Operator => 1172,
+ Iir_Kind_Exponentiation_Operator => 1177,
+ Iir_Kind_Function_Call => 1185,
+ Iir_Kind_Aggregate => 1192,
+ Iir_Kind_Parenthesis_Expression => 1195,
+ Iir_Kind_Qualified_Expression => 1199,
+ Iir_Kind_Type_Conversion => 1204,
+ Iir_Kind_Allocator_By_Expression => 1208,
+ Iir_Kind_Allocator_By_Subtype => 1213,
+ Iir_Kind_Selected_Element => 1219,
+ Iir_Kind_Dereference => 1224,
+ Iir_Kind_Implicit_Dereference => 1229,
+ Iir_Kind_Slice_Name => 1236,
+ Iir_Kind_Indexed_Name => 1242,
+ Iir_Kind_Psl_Expression => 1244,
+ Iir_Kind_Sensitized_Process_Statement => 1265,
+ Iir_Kind_Process_Statement => 1285,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1296,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1307,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1319,
+ Iir_Kind_Concurrent_Assertion_Statement => 1327,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1334,
+ Iir_Kind_Psl_Assert_Statement => 1347,
+ Iir_Kind_Psl_Cover_Statement => 1360,
+ Iir_Kind_Block_Statement => 1373,
+ Iir_Kind_If_Generate_Statement => 1383,
+ Iir_Kind_Case_Generate_Statement => 1392,
+ Iir_Kind_For_Generate_Statement => 1401,
+ Iir_Kind_Component_Instantiation_Statement => 1411,
+ Iir_Kind_Psl_Default_Clock => 1415,
+ Iir_Kind_Simple_Simultaneous_Statement => 1422,
+ Iir_Kind_Generate_Statement_Body => 1433,
+ Iir_Kind_If_Generate_Else_Clause => 1438,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1447,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1456,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1466,
+ Iir_Kind_Null_Statement => 1470,
+ Iir_Kind_Assertion_Statement => 1477,
+ Iir_Kind_Report_Statement => 1483,
+ Iir_Kind_Wait_Statement => 1491,
+ Iir_Kind_Variable_Assignment_Statement => 1497,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1503,
+ Iir_Kind_Return_Statement => 1509,
+ Iir_Kind_For_Loop_Statement => 1518,
+ Iir_Kind_While_Loop_Statement => 1526,
+ Iir_Kind_Next_Statement => 1532,
+ Iir_Kind_Exit_Statement => 1538,
+ Iir_Kind_Case_Statement => 1546,
+ Iir_Kind_Procedure_Call_Statement => 1552,
+ Iir_Kind_If_Statement => 1561,
+ Iir_Kind_Elsif => 1566,
+ Iir_Kind_Character_Literal => 1574,
+ Iir_Kind_Simple_Name => 1582,
+ Iir_Kind_Selected_Name => 1591,
+ Iir_Kind_Operator_Symbol => 1597,
+ Iir_Kind_Reference_Name => 1600,
+ Iir_Kind_Selected_By_All_Name => 1606,
+ Iir_Kind_Parenthesis_Name => 1611,
+ Iir_Kind_External_Constant_Name => 1619,
+ Iir_Kind_External_Signal_Name => 1627,
+ Iir_Kind_External_Variable_Name => 1635,
+ Iir_Kind_Package_Pathname => 1639,
+ Iir_Kind_Absolute_Pathname => 1640,
+ Iir_Kind_Relative_Pathname => 1641,
+ Iir_Kind_Pathname_Element => 1646,
+ Iir_Kind_Base_Attribute => 1648,
+ Iir_Kind_Left_Type_Attribute => 1653,
+ Iir_Kind_Right_Type_Attribute => 1658,
+ Iir_Kind_High_Type_Attribute => 1663,
+ Iir_Kind_Low_Type_Attribute => 1668,
+ Iir_Kind_Ascending_Type_Attribute => 1673,
+ Iir_Kind_Image_Attribute => 1679,
+ Iir_Kind_Value_Attribute => 1685,
+ Iir_Kind_Pos_Attribute => 1691,
+ Iir_Kind_Val_Attribute => 1697,
+ Iir_Kind_Succ_Attribute => 1703,
+ Iir_Kind_Pred_Attribute => 1709,
+ Iir_Kind_Leftof_Attribute => 1715,
+ Iir_Kind_Rightof_Attribute => 1721,
+ Iir_Kind_Delayed_Attribute => 1730,
+ Iir_Kind_Stable_Attribute => 1739,
+ Iir_Kind_Quiet_Attribute => 1748,
+ Iir_Kind_Transaction_Attribute => 1757,
+ Iir_Kind_Event_Attribute => 1761,
+ Iir_Kind_Active_Attribute => 1765,
+ Iir_Kind_Last_Event_Attribute => 1769,
+ Iir_Kind_Last_Active_Attribute => 1773,
+ Iir_Kind_Last_Value_Attribute => 1777,
+ Iir_Kind_Driving_Attribute => 1781,
+ Iir_Kind_Driving_Value_Attribute => 1785,
+ Iir_Kind_Behavior_Attribute => 1785,
+ Iir_Kind_Structure_Attribute => 1785,
+ Iir_Kind_Simple_Name_Attribute => 1792,
+ Iir_Kind_Instance_Name_Attribute => 1797,
+ Iir_Kind_Path_Name_Attribute => 1802,
+ Iir_Kind_Left_Array_Attribute => 1809,
+ Iir_Kind_Right_Array_Attribute => 1816,
+ Iir_Kind_High_Array_Attribute => 1823,
+ Iir_Kind_Low_Array_Attribute => 1830,
+ Iir_Kind_Length_Array_Attribute => 1837,
+ Iir_Kind_Ascending_Array_Attribute => 1844,
+ Iir_Kind_Range_Array_Attribute => 1851,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1858,
+ Iir_Kind_Attribute_Name => 1867
);
function Get_Fields (K : Iir_Kind) return Fields_Array
@@ -7087,6 +7088,7 @@ package body Nodes_Meta is
| Iir_Kind_Library_Clause
| Iir_Kind_Use_Clause
| Iir_Kind_Context_Reference
+ | Iir_Kind_Unaffected_Waveform
| Iir_Kind_Waveform_Element
| Iir_Kind_Conditional_Waveform
| Iir_Kind_Conditional_Expression
diff --git a/src/vhdl/sem_inst.adb b/src/vhdl/sem_inst.adb
index bbe5ad4d7..819894fc6 100644
--- a/src/vhdl/sem_inst.adb
+++ b/src/vhdl/sem_inst.adb
@@ -235,6 +235,7 @@ package body Sem_Inst is
raise Internal_Error;
when Attr_Maybe_Forward_Ref =>
if Get_Is_Forward_Ref (N) then
+ -- Likewise: must be explicitely handled.
raise Internal_Error;
else
R := Instantiate_Iir (S, True);
diff --git a/src/vhdl/sem_specs.adb b/src/vhdl/sem_specs.adb
index 5a1d511e4..b87a6f160 100644
--- a/src/vhdl/sem_specs.adb
+++ b/src/vhdl/sem_specs.adb
@@ -1510,7 +1510,11 @@ package body Sem_Specs is
Aspect := Create_Iir (Iir_Kind_Entity_Aspect_Entity);
Location_Copy (Aspect, Parent);
+ -- Create a name for the entity. As this is a default binding
+ -- indication, the design unit does *NOT* depend on the entity, so the
+ -- reference is a forward reference.
Entity_Name := Build_Simple_Name (Entity, Parent);
+ Set_Is_Forward_Ref (Entity_Name, True);
Set_Entity_Name (Aspect, Entity_Name);
Set_Entity_Aspect (Res, Aspect);
@@ -1642,9 +1646,14 @@ package body Sem_Specs is
Found := Found + 1;
end if;
Set_Whole_Association_Flag (Assoc, True);
+
+ -- Create the formal name. This is a forward reference as the
+ -- current design unit does not depend on the entity.
Name := Build_Simple_Name (Ent_El, Parent);
+ Set_Is_Forward_Ref (Name, True);
Set_Type (Name, Get_Type (Ent_El));
Set_Formal (Assoc, Name);
+
if Kind = Map_Port
and then not Error
and then Comp_El /= Null_Iir