aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2018-11-19 04:57:52 +0100
committerTristan Gingold <tgingold@free.fr>2018-11-19 04:57:52 +0100
commit237cc1e98a703c03da0df40b012c824ab547544c (patch)
treeaf4ddd1983c7b7c43f941c7fc3f8c5910977cdad /src
parent24e8a0e63f83cc26d80efde10df58b60c6ca7c30 (diff)
downloadghdl-237cc1e98a703c03da0df40b012c824ab547544c.tar.gz
ghdl-237cc1e98a703c03da0df40b012c824ab547544c.tar.bz2
ghdl-237cc1e98a703c03da0df40b012c824ab547544c.zip
Check for uninstantiated package in expanded names.
Fix #697
Diffstat (limited to 'src')
-rw-r--r--src/vhdl/iirs.ads2
-rw-r--r--src/vhdl/nodes_meta.adb378
-rw-r--r--src/vhdl/sem.adb37
-rw-r--r--src/vhdl/sem.ads10
-rw-r--r--src/vhdl/sem_names.adb26
5 files changed, 239 insertions, 214 deletions
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index 4057b6fc0..7e3479421 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -928,6 +928,8 @@ package Iirs is
-- of their body.
-- Get/Set_Need_Instance_Bodies (Flag3)
--
+ -- Get/Set_Is_Within_Flag (Flag5)
+ --
-- Get/Set_Visible_Flag (Flag4)
--
-- Get/Set_End_Has_Reserved_Id (Flag8)
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index b7a3a7789..f865ce8c1 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -2837,6 +2837,7 @@ package body Nodes_Meta is
Field_Macro_Expanded_Flag,
Field_Need_Instance_Bodies,
Field_Visible_Flag,
+ Field_Is_Within_Flag,
Field_End_Has_Reserved_Id,
Field_End_Has_Identifier,
Field_Parent,
@@ -4503,194 +4504,194 @@ package body Nodes_Meta is
Iir_Kind_Entity_Declaration => 515,
Iir_Kind_Configuration_Declaration => 524,
Iir_Kind_Context_Declaration => 530,
- Iir_Kind_Package_Declaration => 544,
- Iir_Kind_Package_Instantiation_Declaration => 558,
- Iir_Kind_Package_Body => 566,
- Iir_Kind_Architecture_Body => 578,
- Iir_Kind_Package_Header => 580,
- Iir_Kind_Unit_Declaration => 589,
- Iir_Kind_Library_Declaration => 596,
- Iir_Kind_Component_Declaration => 606,
- Iir_Kind_Attribute_Declaration => 613,
- Iir_Kind_Group_Template_Declaration => 619,
- Iir_Kind_Group_Declaration => 626,
- Iir_Kind_Element_Declaration => 634,
- Iir_Kind_Non_Object_Alias_Declaration => 642,
- Iir_Kind_Psl_Declaration => 650,
- Iir_Kind_Psl_Endpoint_Declaration => 664,
- Iir_Kind_Terminal_Declaration => 670,
- Iir_Kind_Free_Quantity_Declaration => 679,
- Iir_Kind_Across_Quantity_Declaration => 691,
- Iir_Kind_Through_Quantity_Declaration => 703,
- Iir_Kind_Enumeration_Literal => 714,
- Iir_Kind_Function_Declaration => 739,
- Iir_Kind_Procedure_Declaration => 763,
- Iir_Kind_Function_Body => 773,
- Iir_Kind_Procedure_Body => 784,
- Iir_Kind_Object_Alias_Declaration => 795,
- Iir_Kind_File_Declaration => 809,
- Iir_Kind_Guard_Signal_Declaration => 822,
- Iir_Kind_Signal_Declaration => 839,
- Iir_Kind_Variable_Declaration => 852,
- Iir_Kind_Constant_Declaration => 866,
- Iir_Kind_Iterator_Declaration => 877,
- Iir_Kind_Interface_Constant_Declaration => 893,
- Iir_Kind_Interface_Variable_Declaration => 909,
- Iir_Kind_Interface_Signal_Declaration => 930,
- Iir_Kind_Interface_File_Declaration => 946,
- Iir_Kind_Interface_Type_Declaration => 956,
- Iir_Kind_Interface_Package_Declaration => 968,
- Iir_Kind_Interface_Function_Declaration => 985,
- Iir_Kind_Interface_Procedure_Declaration => 998,
- Iir_Kind_Signal_Attribute_Declaration => 1001,
- Iir_Kind_Identity_Operator => 1005,
- Iir_Kind_Negation_Operator => 1009,
- Iir_Kind_Absolute_Operator => 1013,
- Iir_Kind_Not_Operator => 1017,
- Iir_Kind_Implicit_Condition_Operator => 1021,
- Iir_Kind_Condition_Operator => 1025,
- Iir_Kind_Reduction_And_Operator => 1029,
- Iir_Kind_Reduction_Or_Operator => 1033,
- Iir_Kind_Reduction_Nand_Operator => 1037,
- Iir_Kind_Reduction_Nor_Operator => 1041,
- Iir_Kind_Reduction_Xor_Operator => 1045,
- Iir_Kind_Reduction_Xnor_Operator => 1049,
- Iir_Kind_And_Operator => 1054,
- Iir_Kind_Or_Operator => 1059,
- Iir_Kind_Nand_Operator => 1064,
- Iir_Kind_Nor_Operator => 1069,
- Iir_Kind_Xor_Operator => 1074,
- Iir_Kind_Xnor_Operator => 1079,
- Iir_Kind_Equality_Operator => 1084,
- Iir_Kind_Inequality_Operator => 1089,
- Iir_Kind_Less_Than_Operator => 1094,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1099,
- Iir_Kind_Greater_Than_Operator => 1104,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1109,
- Iir_Kind_Match_Equality_Operator => 1114,
- Iir_Kind_Match_Inequality_Operator => 1119,
- Iir_Kind_Match_Less_Than_Operator => 1124,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1129,
- Iir_Kind_Match_Greater_Than_Operator => 1134,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1139,
- Iir_Kind_Sll_Operator => 1144,
- Iir_Kind_Sla_Operator => 1149,
- Iir_Kind_Srl_Operator => 1154,
- Iir_Kind_Sra_Operator => 1159,
- Iir_Kind_Rol_Operator => 1164,
- Iir_Kind_Ror_Operator => 1169,
- Iir_Kind_Addition_Operator => 1174,
- Iir_Kind_Substraction_Operator => 1179,
- Iir_Kind_Concatenation_Operator => 1184,
- Iir_Kind_Multiplication_Operator => 1189,
- Iir_Kind_Division_Operator => 1194,
- Iir_Kind_Modulus_Operator => 1199,
- Iir_Kind_Remainder_Operator => 1204,
- Iir_Kind_Exponentiation_Operator => 1209,
- Iir_Kind_Function_Call => 1217,
- Iir_Kind_Aggregate => 1224,
- Iir_Kind_Parenthesis_Expression => 1227,
- Iir_Kind_Qualified_Expression => 1231,
- Iir_Kind_Type_Conversion => 1236,
- Iir_Kind_Allocator_By_Expression => 1240,
- Iir_Kind_Allocator_By_Subtype => 1245,
- Iir_Kind_Selected_Element => 1252,
- Iir_Kind_Dereference => 1257,
- Iir_Kind_Implicit_Dereference => 1262,
- Iir_Kind_Slice_Name => 1269,
- Iir_Kind_Indexed_Name => 1275,
- Iir_Kind_Psl_Expression => 1277,
- Iir_Kind_Sensitized_Process_Statement => 1298,
- Iir_Kind_Process_Statement => 1318,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1330,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1342,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1355,
- Iir_Kind_Concurrent_Assertion_Statement => 1363,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1370,
- Iir_Kind_Psl_Assert_Statement => 1383,
- Iir_Kind_Psl_Cover_Statement => 1396,
- Iir_Kind_Block_Statement => 1409,
- Iir_Kind_If_Generate_Statement => 1420,
- Iir_Kind_Case_Generate_Statement => 1429,
- Iir_Kind_For_Generate_Statement => 1438,
- Iir_Kind_Component_Instantiation_Statement => 1449,
- Iir_Kind_Psl_Default_Clock => 1453,
- Iir_Kind_Simple_Simultaneous_Statement => 1460,
- Iir_Kind_Generate_Statement_Body => 1471,
- Iir_Kind_If_Generate_Else_Clause => 1477,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1487,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1497,
- Iir_Kind_Selected_Waveform_Assignment_Statement => 1508,
- Iir_Kind_Null_Statement => 1512,
- Iir_Kind_Assertion_Statement => 1519,
- Iir_Kind_Report_Statement => 1525,
- Iir_Kind_Wait_Statement => 1533,
- Iir_Kind_Variable_Assignment_Statement => 1540,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1547,
- Iir_Kind_Return_Statement => 1553,
- Iir_Kind_For_Loop_Statement => 1562,
- Iir_Kind_While_Loop_Statement => 1571,
- Iir_Kind_Next_Statement => 1578,
- Iir_Kind_Exit_Statement => 1585,
- Iir_Kind_Case_Statement => 1593,
- Iir_Kind_Procedure_Call_Statement => 1599,
- Iir_Kind_If_Statement => 1609,
- Iir_Kind_Elsif => 1615,
- Iir_Kind_Character_Literal => 1623,
- Iir_Kind_Simple_Name => 1631,
- Iir_Kind_Selected_Name => 1640,
- Iir_Kind_Operator_Symbol => 1646,
- Iir_Kind_Reference_Name => 1649,
- Iir_Kind_External_Constant_Name => 1658,
- Iir_Kind_External_Signal_Name => 1667,
- Iir_Kind_External_Variable_Name => 1676,
- Iir_Kind_Selected_By_All_Name => 1682,
- Iir_Kind_Parenthesis_Name => 1687,
- Iir_Kind_Package_Pathname => 1691,
- Iir_Kind_Absolute_Pathname => 1692,
- Iir_Kind_Relative_Pathname => 1693,
- Iir_Kind_Pathname_Element => 1698,
- Iir_Kind_Base_Attribute => 1700,
- Iir_Kind_Subtype_Attribute => 1705,
- Iir_Kind_Element_Attribute => 1710,
- Iir_Kind_Left_Type_Attribute => 1715,
- Iir_Kind_Right_Type_Attribute => 1720,
- Iir_Kind_High_Type_Attribute => 1725,
- Iir_Kind_Low_Type_Attribute => 1730,
- Iir_Kind_Ascending_Type_Attribute => 1735,
- Iir_Kind_Image_Attribute => 1741,
- Iir_Kind_Value_Attribute => 1747,
- Iir_Kind_Pos_Attribute => 1753,
- Iir_Kind_Val_Attribute => 1759,
- Iir_Kind_Succ_Attribute => 1765,
- Iir_Kind_Pred_Attribute => 1771,
- Iir_Kind_Leftof_Attribute => 1777,
- Iir_Kind_Rightof_Attribute => 1783,
- Iir_Kind_Delayed_Attribute => 1792,
- Iir_Kind_Stable_Attribute => 1801,
- Iir_Kind_Quiet_Attribute => 1810,
- Iir_Kind_Transaction_Attribute => 1819,
- Iir_Kind_Event_Attribute => 1823,
- Iir_Kind_Active_Attribute => 1827,
- Iir_Kind_Last_Event_Attribute => 1831,
- Iir_Kind_Last_Active_Attribute => 1835,
- Iir_Kind_Last_Value_Attribute => 1839,
- Iir_Kind_Driving_Attribute => 1843,
- Iir_Kind_Driving_Value_Attribute => 1847,
- Iir_Kind_Behavior_Attribute => 1847,
- Iir_Kind_Structure_Attribute => 1847,
- Iir_Kind_Simple_Name_Attribute => 1854,
- Iir_Kind_Instance_Name_Attribute => 1859,
- Iir_Kind_Path_Name_Attribute => 1864,
- Iir_Kind_Left_Array_Attribute => 1871,
- Iir_Kind_Right_Array_Attribute => 1878,
- Iir_Kind_High_Array_Attribute => 1885,
- Iir_Kind_Low_Array_Attribute => 1892,
- Iir_Kind_Length_Array_Attribute => 1899,
- Iir_Kind_Ascending_Array_Attribute => 1906,
- Iir_Kind_Range_Array_Attribute => 1913,
- Iir_Kind_Reverse_Range_Array_Attribute => 1920,
- Iir_Kind_Attribute_Name => 1929
+ Iir_Kind_Package_Declaration => 545,
+ Iir_Kind_Package_Instantiation_Declaration => 559,
+ Iir_Kind_Package_Body => 567,
+ Iir_Kind_Architecture_Body => 579,
+ Iir_Kind_Package_Header => 581,
+ Iir_Kind_Unit_Declaration => 590,
+ Iir_Kind_Library_Declaration => 597,
+ Iir_Kind_Component_Declaration => 607,
+ Iir_Kind_Attribute_Declaration => 614,
+ Iir_Kind_Group_Template_Declaration => 620,
+ Iir_Kind_Group_Declaration => 627,
+ Iir_Kind_Element_Declaration => 635,
+ Iir_Kind_Non_Object_Alias_Declaration => 643,
+ Iir_Kind_Psl_Declaration => 651,
+ Iir_Kind_Psl_Endpoint_Declaration => 665,
+ Iir_Kind_Terminal_Declaration => 671,
+ Iir_Kind_Free_Quantity_Declaration => 680,
+ Iir_Kind_Across_Quantity_Declaration => 692,
+ Iir_Kind_Through_Quantity_Declaration => 704,
+ Iir_Kind_Enumeration_Literal => 715,
+ Iir_Kind_Function_Declaration => 740,
+ Iir_Kind_Procedure_Declaration => 764,
+ Iir_Kind_Function_Body => 774,
+ Iir_Kind_Procedure_Body => 785,
+ Iir_Kind_Object_Alias_Declaration => 796,
+ Iir_Kind_File_Declaration => 810,
+ Iir_Kind_Guard_Signal_Declaration => 823,
+ Iir_Kind_Signal_Declaration => 840,
+ Iir_Kind_Variable_Declaration => 853,
+ Iir_Kind_Constant_Declaration => 867,
+ Iir_Kind_Iterator_Declaration => 878,
+ Iir_Kind_Interface_Constant_Declaration => 894,
+ Iir_Kind_Interface_Variable_Declaration => 910,
+ Iir_Kind_Interface_Signal_Declaration => 931,
+ Iir_Kind_Interface_File_Declaration => 947,
+ Iir_Kind_Interface_Type_Declaration => 957,
+ Iir_Kind_Interface_Package_Declaration => 969,
+ Iir_Kind_Interface_Function_Declaration => 986,
+ Iir_Kind_Interface_Procedure_Declaration => 999,
+ Iir_Kind_Signal_Attribute_Declaration => 1002,
+ Iir_Kind_Identity_Operator => 1006,
+ Iir_Kind_Negation_Operator => 1010,
+ Iir_Kind_Absolute_Operator => 1014,
+ Iir_Kind_Not_Operator => 1018,
+ Iir_Kind_Implicit_Condition_Operator => 1022,
+ Iir_Kind_Condition_Operator => 1026,
+ Iir_Kind_Reduction_And_Operator => 1030,
+ Iir_Kind_Reduction_Or_Operator => 1034,
+ Iir_Kind_Reduction_Nand_Operator => 1038,
+ Iir_Kind_Reduction_Nor_Operator => 1042,
+ Iir_Kind_Reduction_Xor_Operator => 1046,
+ Iir_Kind_Reduction_Xnor_Operator => 1050,
+ Iir_Kind_And_Operator => 1055,
+ Iir_Kind_Or_Operator => 1060,
+ Iir_Kind_Nand_Operator => 1065,
+ Iir_Kind_Nor_Operator => 1070,
+ Iir_Kind_Xor_Operator => 1075,
+ Iir_Kind_Xnor_Operator => 1080,
+ Iir_Kind_Equality_Operator => 1085,
+ Iir_Kind_Inequality_Operator => 1090,
+ Iir_Kind_Less_Than_Operator => 1095,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1100,
+ Iir_Kind_Greater_Than_Operator => 1105,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1110,
+ Iir_Kind_Match_Equality_Operator => 1115,
+ Iir_Kind_Match_Inequality_Operator => 1120,
+ Iir_Kind_Match_Less_Than_Operator => 1125,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1130,
+ Iir_Kind_Match_Greater_Than_Operator => 1135,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1140,
+ Iir_Kind_Sll_Operator => 1145,
+ Iir_Kind_Sla_Operator => 1150,
+ Iir_Kind_Srl_Operator => 1155,
+ Iir_Kind_Sra_Operator => 1160,
+ Iir_Kind_Rol_Operator => 1165,
+ Iir_Kind_Ror_Operator => 1170,
+ Iir_Kind_Addition_Operator => 1175,
+ Iir_Kind_Substraction_Operator => 1180,
+ Iir_Kind_Concatenation_Operator => 1185,
+ Iir_Kind_Multiplication_Operator => 1190,
+ Iir_Kind_Division_Operator => 1195,
+ Iir_Kind_Modulus_Operator => 1200,
+ Iir_Kind_Remainder_Operator => 1205,
+ Iir_Kind_Exponentiation_Operator => 1210,
+ Iir_Kind_Function_Call => 1218,
+ Iir_Kind_Aggregate => 1225,
+ Iir_Kind_Parenthesis_Expression => 1228,
+ Iir_Kind_Qualified_Expression => 1232,
+ Iir_Kind_Type_Conversion => 1237,
+ Iir_Kind_Allocator_By_Expression => 1241,
+ Iir_Kind_Allocator_By_Subtype => 1246,
+ Iir_Kind_Selected_Element => 1253,
+ Iir_Kind_Dereference => 1258,
+ Iir_Kind_Implicit_Dereference => 1263,
+ Iir_Kind_Slice_Name => 1270,
+ Iir_Kind_Indexed_Name => 1276,
+ Iir_Kind_Psl_Expression => 1278,
+ Iir_Kind_Sensitized_Process_Statement => 1299,
+ Iir_Kind_Process_Statement => 1319,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1331,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1343,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1356,
+ Iir_Kind_Concurrent_Assertion_Statement => 1364,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1371,
+ Iir_Kind_Psl_Assert_Statement => 1384,
+ Iir_Kind_Psl_Cover_Statement => 1397,
+ Iir_Kind_Block_Statement => 1410,
+ Iir_Kind_If_Generate_Statement => 1421,
+ Iir_Kind_Case_Generate_Statement => 1430,
+ Iir_Kind_For_Generate_Statement => 1439,
+ Iir_Kind_Component_Instantiation_Statement => 1450,
+ Iir_Kind_Psl_Default_Clock => 1454,
+ Iir_Kind_Simple_Simultaneous_Statement => 1461,
+ Iir_Kind_Generate_Statement_Body => 1472,
+ Iir_Kind_If_Generate_Else_Clause => 1478,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1488,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1498,
+ Iir_Kind_Selected_Waveform_Assignment_Statement => 1509,
+ Iir_Kind_Null_Statement => 1513,
+ Iir_Kind_Assertion_Statement => 1520,
+ Iir_Kind_Report_Statement => 1526,
+ Iir_Kind_Wait_Statement => 1534,
+ Iir_Kind_Variable_Assignment_Statement => 1541,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1548,
+ Iir_Kind_Return_Statement => 1554,
+ Iir_Kind_For_Loop_Statement => 1563,
+ Iir_Kind_While_Loop_Statement => 1572,
+ Iir_Kind_Next_Statement => 1579,
+ Iir_Kind_Exit_Statement => 1586,
+ Iir_Kind_Case_Statement => 1594,
+ Iir_Kind_Procedure_Call_Statement => 1600,
+ Iir_Kind_If_Statement => 1610,
+ Iir_Kind_Elsif => 1616,
+ Iir_Kind_Character_Literal => 1624,
+ Iir_Kind_Simple_Name => 1632,
+ Iir_Kind_Selected_Name => 1641,
+ Iir_Kind_Operator_Symbol => 1647,
+ Iir_Kind_Reference_Name => 1650,
+ Iir_Kind_External_Constant_Name => 1659,
+ Iir_Kind_External_Signal_Name => 1668,
+ Iir_Kind_External_Variable_Name => 1677,
+ Iir_Kind_Selected_By_All_Name => 1683,
+ Iir_Kind_Parenthesis_Name => 1688,
+ Iir_Kind_Package_Pathname => 1692,
+ Iir_Kind_Absolute_Pathname => 1693,
+ Iir_Kind_Relative_Pathname => 1694,
+ Iir_Kind_Pathname_Element => 1699,
+ Iir_Kind_Base_Attribute => 1701,
+ Iir_Kind_Subtype_Attribute => 1706,
+ Iir_Kind_Element_Attribute => 1711,
+ Iir_Kind_Left_Type_Attribute => 1716,
+ Iir_Kind_Right_Type_Attribute => 1721,
+ Iir_Kind_High_Type_Attribute => 1726,
+ Iir_Kind_Low_Type_Attribute => 1731,
+ Iir_Kind_Ascending_Type_Attribute => 1736,
+ Iir_Kind_Image_Attribute => 1742,
+ Iir_Kind_Value_Attribute => 1748,
+ Iir_Kind_Pos_Attribute => 1754,
+ Iir_Kind_Val_Attribute => 1760,
+ Iir_Kind_Succ_Attribute => 1766,
+ Iir_Kind_Pred_Attribute => 1772,
+ Iir_Kind_Leftof_Attribute => 1778,
+ Iir_Kind_Rightof_Attribute => 1784,
+ Iir_Kind_Delayed_Attribute => 1793,
+ Iir_Kind_Stable_Attribute => 1802,
+ Iir_Kind_Quiet_Attribute => 1811,
+ Iir_Kind_Transaction_Attribute => 1820,
+ Iir_Kind_Event_Attribute => 1824,
+ Iir_Kind_Active_Attribute => 1828,
+ Iir_Kind_Last_Event_Attribute => 1832,
+ Iir_Kind_Last_Active_Attribute => 1836,
+ Iir_Kind_Last_Value_Attribute => 1840,
+ Iir_Kind_Driving_Attribute => 1844,
+ Iir_Kind_Driving_Value_Attribute => 1848,
+ Iir_Kind_Behavior_Attribute => 1848,
+ Iir_Kind_Structure_Attribute => 1848,
+ Iir_Kind_Simple_Name_Attribute => 1855,
+ Iir_Kind_Instance_Name_Attribute => 1860,
+ Iir_Kind_Path_Name_Attribute => 1865,
+ Iir_Kind_Left_Array_Attribute => 1872,
+ Iir_Kind_Right_Array_Attribute => 1879,
+ Iir_Kind_High_Array_Attribute => 1886,
+ Iir_Kind_Low_Array_Attribute => 1893,
+ Iir_Kind_Length_Array_Attribute => 1900,
+ Iir_Kind_Ascending_Array_Attribute => 1907,
+ Iir_Kind_Range_Array_Attribute => 1914,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1921,
+ Iir_Kind_Attribute_Name => 1930
);
function Get_Fields_First (K : Iir_Kind) return Fields_Index is
@@ -10302,6 +10303,7 @@ package body Nodes_Meta is
begin
case K is
when Iir_Kind_Entity_Declaration
+ | Iir_Kind_Package_Declaration
| Iir_Kind_Architecture_Body
| Iir_Kind_Enumeration_Literal
| Iir_Kind_Function_Declaration
diff --git a/src/vhdl/sem.adb b/src/vhdl/sem.adb
index 1e12de32c..98ae4ec6c 100644
--- a/src/vhdl/sem.adb
+++ b/src/vhdl/sem.adb
@@ -58,7 +58,7 @@ package body Sem is
end Add_Dependence;
-- LRM 1.1 Entity declaration.
- procedure Sem_Entity_Declaration (Entity: Iir_Entity_Declaration) is
+ procedure Sem_Entity_Declaration (Entity : Iir_Entity_Declaration) is
begin
Xrefs.Xref_Decl (Entity);
Sem_Scopes.Add_Name (Entity);
@@ -2638,22 +2638,24 @@ package body Sem is
end Is_Package_Macro_Expanded;
-- LRM 2.5 Package Declarations.
- procedure Sem_Package_Declaration (Decl: Iir_Package_Declaration)
+ procedure Sem_Package_Declaration (Pkg : Iir_Package_Declaration)
is
- Unit : constant Iir_Design_Unit := Get_Design_Unit (Decl);
- Header : constant Iir := Get_Package_Header (Decl);
+ Unit : constant Iir_Design_Unit := Get_Design_Unit (Pkg);
+ Header : constant Iir := Get_Package_Header (Pkg);
Implicit : Implicit_Signal_Declaration_Type;
begin
- Sem_Scopes.Add_Name (Decl);
- Set_Visible_Flag (Decl, True);
- Xref_Decl (Decl);
+ Sem_Scopes.Add_Name (Pkg);
+ Set_Visible_Flag (Pkg, True);
+ Xref_Decl (Pkg);
+
+ Set_Is_Within_Flag (Pkg, True);
-- Identify IEEE.Std_Logic_1164 for VHDL08.
- if Get_Identifier (Decl) = Std_Names.Name_Std_Logic_1164
+ if Get_Identifier (Pkg) = Std_Names.Name_Std_Logic_1164
and then (Get_Identifier (Get_Library (Get_Design_File (Unit)))
= Std_Names.Name_Ieee)
then
- Ieee.Std_Logic_1164.Std_Logic_1164_Pkg := Decl;
+ Ieee.Std_Logic_1164.Std_Logic_1164_Pkg := Pkg;
end if;
-- LRM93 10.1 Declarative Region
@@ -2661,7 +2663,7 @@ package body Sem is
-- body (if any).
Open_Declarative_Region;
- Push_Signals_Declarative_Part (Implicit, Decl);
+ Push_Signals_Declarative_Part (Implicit, Pkg);
if Header /= Null_Iir then
declare
@@ -2676,7 +2678,7 @@ package body Sem is
if Generic_Map /= Null_Iir then
-- Generic-mapped packages are not macro-expanded.
- Set_Macro_Expanded_Flag (Decl, False);
+ Set_Macro_Expanded_Flag (Pkg, False);
if Sem_Generic_Association_Chain (Header, Header) then
-- For generic-mapped packages, use the actual type for
@@ -2700,25 +2702,26 @@ package body Sem is
else
-- Uninstantiated package. Maybe macro expanded.
Set_Macro_Expanded_Flag
- (Decl, Is_Package_Macro_Expanded (Decl));
+ (Pkg, Is_Package_Macro_Expanded (Pkg));
end if;
end;
else
-- Simple packages are never expanded.
- Set_Macro_Expanded_Flag (Decl, False);
+ Set_Macro_Expanded_Flag (Pkg, False);
end if;
- Sem_Declaration_Chain (Decl);
+ Sem_Declaration_Chain (Pkg);
-- GHDL: subprogram bodies appear in package body.
Pop_Signals_Declarative_Part (Implicit);
Close_Declarative_Region;
+ Set_Is_Within_Flag (Pkg, False);
- Set_Need_Body (Decl, Package_Need_Body_P (Decl));
+ Set_Need_Body (Pkg, Package_Need_Body_P (Pkg));
if Vhdl_Std >= Vhdl_08 then
Set_Need_Instance_Bodies
- (Decl, Package_Need_Instance_Bodies_P (Decl));
+ (Pkg, Package_Need_Instance_Bodies_P (Pkg));
end if;
end Sem_Package_Declaration;
@@ -2791,6 +2794,7 @@ package body Sem is
Set_Package (Decl, Package_Decl);
Xref_Body (Decl, Package_Decl);
Set_Package_Body (Package_Decl, Decl);
+ Set_Is_Within_Flag (Package_Decl, True);
-- LRM93 10.1 Declarative Region
-- 4. A package declaration, together with the corresponding
@@ -2804,6 +2808,7 @@ package body Sem is
Check_Full_Declaration (Package_Decl, Decl);
Close_Declarative_Region;
+ Set_Is_Within_Flag (Package_Decl, False);
end Sem_Package_Body;
function Sem_Uninstantiated_Package_Name (Decl : Iir) return Iir
diff --git a/src/vhdl/sem.ads b/src/vhdl/sem.ads
index 346b21f2c..c42301031 100644
--- a/src/vhdl/sem.ads
+++ b/src/vhdl/sem.ads
@@ -67,17 +67,17 @@ package Sem is
procedure Sem_Use_Clause (Clauses : Iir_Use_Clause);
-- LRM 2.1 Subprogram Declarations.
- procedure Sem_Subprogram_Specification (Subprg: Iir);
- procedure Sem_Subprogram_Declaration (Subprg: Iir);
+ procedure Sem_Subprogram_Specification (Subprg : Iir);
+ procedure Sem_Subprogram_Declaration (Subprg : Iir);
-- LRM 2.2 Subprogram Bodies.
- procedure Sem_Subprogram_Body (Subprg: Iir);
+ procedure Sem_Subprogram_Body (Subprg : Iir);
-- LRM 2.5 Package Declarations.
- procedure Sem_Package_Declaration (Decl: Iir_Package_Declaration);
+ procedure Sem_Package_Declaration (Pkg : Iir_Package_Declaration);
-- LRM 2.6 Package Bodies.
- procedure Sem_Package_Body (Decl: Iir);
+ procedure Sem_Package_Body (Decl : Iir);
-- LRM08 4.9 Package Instantiation Declaration
procedure Sem_Package_Instantiation_Declaration (Decl : Iir);
diff --git a/src/vhdl/sem_names.adb b/src/vhdl/sem_names.adb
index 09d99d8d5..749d848fe 100644
--- a/src/vhdl/sem_names.adb
+++ b/src/vhdl/sem_names.adb
@@ -2195,7 +2195,7 @@ package body Sem_Names is
(+Name, "no declaration for %i in %n", (+Suffix, +Prefix));
end if;
else
- -- LRM93 §6.3
+ -- LRM93 6.3
-- This form of expanded name is only allowed within the
-- construct itself.
-- FIXME: LRM08 12.3 Visibility h)
@@ -2203,12 +2203,28 @@ package body Sem_Names is
Iir_Kind_Package_Declaration,
Iir_Kind_Package_Instantiation_Declaration)
and then not Get_Is_Within_Flag (Prefix)
- and then not Soft
then
- Error_Msg_Sem
- (+Prefix_Loc,
- "an expanded name is only allowed within the construct");
+ if not Soft then
+ Error_Msg_Sem
+ (+Prefix_Loc,
+ "an expanded name is only allowed "
+ & "within the construct");
+ end if;
-- Hum, keep res.
+ elsif Get_Kind (Prefix) = Iir_Kind_Package_Declaration
+ and then not Get_Is_Within_Flag (Prefix)
+ and then Is_Uninstantiated_Package (Prefix)
+ then
+ -- LRM08 12.3 f) Visibility
+ -- For a declaration given in a package declaration, other
+ -- than in a package declaration that defines an
+ -- uninstantiated package: [...]
+ if not Soft then
+ Error_Msg_Sem
+ (+Prefix_Loc,
+ "cannot refer a declaration in an "
+ & "uninstantiated package");
+ end if;
end if;
end if;
when Iir_Kind_Function_Declaration =>