diff options
-rw-r--r-- | src/vhdl/iirs.ads | 2 | ||||
-rw-r--r-- | src/vhdl/nodes_meta.adb | 348 | ||||
-rw-r--r-- | src/vhdl/sem_decls.adb | 42 | ||||
-rw-r--r-- | src/vhdl/sem_types.adb | 6 |
4 files changed, 212 insertions, 186 deletions
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads index 6bc91777e..88ee1d117 100644 --- a/src/vhdl/iirs.ads +++ b/src/vhdl/iirs.ads @@ -1931,6 +1931,8 @@ package Iirs is -- Get/Set_Visible_Flag (Flag4) -- -- Get/Set_Use_Flag (Flag6) + -- + -- Get/Set_Has_Identifier_List (Flag3) -- Iir_Kind_Free_Quantity_Declaration (Short) -- diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb index 48b00f7c2..d16bc5887 100644 --- a/src/vhdl/nodes_meta.adb +++ b/src/vhdl/nodes_meta.adb @@ -2980,6 +2980,7 @@ package body Nodes_Meta is Field_PSL_Clock_Sensitivity, -- Iir_Kind_Terminal_Declaration Field_Identifier, + Field_Has_Identifier_List, Field_Visible_Flag, Field_Use_Flag, Field_Parent, @@ -4517,179 +4518,179 @@ package body Nodes_Meta is Iir_Kind_Non_Object_Alias_Declaration => 645, Iir_Kind_Psl_Declaration => 653, Iir_Kind_Psl_Endpoint_Declaration => 667, - Iir_Kind_Terminal_Declaration => 673, - Iir_Kind_Free_Quantity_Declaration => 682, - Iir_Kind_Across_Quantity_Declaration => 694, - Iir_Kind_Through_Quantity_Declaration => 706, - Iir_Kind_Enumeration_Literal => 717, - Iir_Kind_Function_Declaration => 742, - Iir_Kind_Procedure_Declaration => 766, - Iir_Kind_Function_Body => 776, - Iir_Kind_Procedure_Body => 787, - Iir_Kind_Object_Alias_Declaration => 798, - Iir_Kind_File_Declaration => 812, - Iir_Kind_Guard_Signal_Declaration => 825, - Iir_Kind_Signal_Declaration => 842, - Iir_Kind_Variable_Declaration => 855, - Iir_Kind_Constant_Declaration => 869, - Iir_Kind_Iterator_Declaration => 880, - Iir_Kind_Interface_Constant_Declaration => 896, - Iir_Kind_Interface_Variable_Declaration => 912, - Iir_Kind_Interface_Signal_Declaration => 933, - Iir_Kind_Interface_File_Declaration => 949, - Iir_Kind_Interface_Type_Declaration => 959, - Iir_Kind_Interface_Package_Declaration => 971, - Iir_Kind_Interface_Function_Declaration => 988, - Iir_Kind_Interface_Procedure_Declaration => 1001, - Iir_Kind_Signal_Attribute_Declaration => 1004, - Iir_Kind_Identity_Operator => 1008, - Iir_Kind_Negation_Operator => 1012, - Iir_Kind_Absolute_Operator => 1016, - Iir_Kind_Not_Operator => 1020, - Iir_Kind_Implicit_Condition_Operator => 1024, - Iir_Kind_Condition_Operator => 1028, - Iir_Kind_Reduction_And_Operator => 1032, - Iir_Kind_Reduction_Or_Operator => 1036, - Iir_Kind_Reduction_Nand_Operator => 1040, - Iir_Kind_Reduction_Nor_Operator => 1044, - Iir_Kind_Reduction_Xor_Operator => 1048, - Iir_Kind_Reduction_Xnor_Operator => 1052, - Iir_Kind_And_Operator => 1057, - Iir_Kind_Or_Operator => 1062, - Iir_Kind_Nand_Operator => 1067, - Iir_Kind_Nor_Operator => 1072, - Iir_Kind_Xor_Operator => 1077, - Iir_Kind_Xnor_Operator => 1082, - Iir_Kind_Equality_Operator => 1087, - Iir_Kind_Inequality_Operator => 1092, - Iir_Kind_Less_Than_Operator => 1097, - Iir_Kind_Less_Than_Or_Equal_Operator => 1102, - Iir_Kind_Greater_Than_Operator => 1107, - Iir_Kind_Greater_Than_Or_Equal_Operator => 1112, - Iir_Kind_Match_Equality_Operator => 1117, - Iir_Kind_Match_Inequality_Operator => 1122, - Iir_Kind_Match_Less_Than_Operator => 1127, - Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1132, - Iir_Kind_Match_Greater_Than_Operator => 1137, - Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1142, - Iir_Kind_Sll_Operator => 1147, - Iir_Kind_Sla_Operator => 1152, - Iir_Kind_Srl_Operator => 1157, - Iir_Kind_Sra_Operator => 1162, - Iir_Kind_Rol_Operator => 1167, - Iir_Kind_Ror_Operator => 1172, - Iir_Kind_Addition_Operator => 1177, - Iir_Kind_Substraction_Operator => 1182, - Iir_Kind_Concatenation_Operator => 1187, - Iir_Kind_Multiplication_Operator => 1192, - Iir_Kind_Division_Operator => 1197, - Iir_Kind_Modulus_Operator => 1202, - Iir_Kind_Remainder_Operator => 1207, - Iir_Kind_Exponentiation_Operator => 1212, - Iir_Kind_Function_Call => 1220, - Iir_Kind_Aggregate => 1227, - Iir_Kind_Parenthesis_Expression => 1230, - Iir_Kind_Qualified_Expression => 1234, - Iir_Kind_Type_Conversion => 1239, - Iir_Kind_Allocator_By_Expression => 1243, - Iir_Kind_Allocator_By_Subtype => 1248, - Iir_Kind_Selected_Element => 1256, - Iir_Kind_Dereference => 1261, - Iir_Kind_Implicit_Dereference => 1266, - Iir_Kind_Slice_Name => 1273, - Iir_Kind_Indexed_Name => 1279, - Iir_Kind_Psl_Expression => 1281, - Iir_Kind_Sensitized_Process_Statement => 1302, - Iir_Kind_Process_Statement => 1322, - Iir_Kind_Concurrent_Simple_Signal_Assignment => 1334, - Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1346, - Iir_Kind_Concurrent_Selected_Signal_Assignment => 1359, - Iir_Kind_Concurrent_Assertion_Statement => 1367, - Iir_Kind_Concurrent_Procedure_Call_Statement => 1374, - Iir_Kind_Psl_Assert_Statement => 1387, - Iir_Kind_Psl_Cover_Statement => 1400, - Iir_Kind_Block_Statement => 1413, - Iir_Kind_If_Generate_Statement => 1424, - Iir_Kind_Case_Generate_Statement => 1433, - Iir_Kind_For_Generate_Statement => 1442, - Iir_Kind_Component_Instantiation_Statement => 1453, - Iir_Kind_Psl_Default_Clock => 1457, - Iir_Kind_Simple_Simultaneous_Statement => 1464, - Iir_Kind_Generate_Statement_Body => 1475, - Iir_Kind_If_Generate_Else_Clause => 1481, - Iir_Kind_Simple_Signal_Assignment_Statement => 1491, - Iir_Kind_Conditional_Signal_Assignment_Statement => 1501, - Iir_Kind_Selected_Waveform_Assignment_Statement => 1512, - Iir_Kind_Null_Statement => 1516, - Iir_Kind_Assertion_Statement => 1523, - Iir_Kind_Report_Statement => 1529, - Iir_Kind_Wait_Statement => 1537, - Iir_Kind_Variable_Assignment_Statement => 1544, - Iir_Kind_Conditional_Variable_Assignment_Statement => 1551, - Iir_Kind_Return_Statement => 1557, - Iir_Kind_For_Loop_Statement => 1566, - Iir_Kind_While_Loop_Statement => 1575, - Iir_Kind_Next_Statement => 1582, - Iir_Kind_Exit_Statement => 1589, - Iir_Kind_Case_Statement => 1597, - Iir_Kind_Procedure_Call_Statement => 1603, - Iir_Kind_If_Statement => 1613, - Iir_Kind_Elsif => 1619, - Iir_Kind_Character_Literal => 1627, - Iir_Kind_Simple_Name => 1635, - Iir_Kind_Selected_Name => 1644, - Iir_Kind_Operator_Symbol => 1650, - Iir_Kind_Reference_Name => 1653, - Iir_Kind_External_Constant_Name => 1662, - Iir_Kind_External_Signal_Name => 1671, - Iir_Kind_External_Variable_Name => 1680, - Iir_Kind_Selected_By_All_Name => 1686, - Iir_Kind_Parenthesis_Name => 1691, - Iir_Kind_Package_Pathname => 1695, - Iir_Kind_Absolute_Pathname => 1696, - Iir_Kind_Relative_Pathname => 1697, - Iir_Kind_Pathname_Element => 1702, - Iir_Kind_Base_Attribute => 1704, - Iir_Kind_Subtype_Attribute => 1709, - Iir_Kind_Element_Attribute => 1714, - Iir_Kind_Left_Type_Attribute => 1719, - Iir_Kind_Right_Type_Attribute => 1724, - Iir_Kind_High_Type_Attribute => 1729, - Iir_Kind_Low_Type_Attribute => 1734, - Iir_Kind_Ascending_Type_Attribute => 1739, - Iir_Kind_Image_Attribute => 1745, - Iir_Kind_Value_Attribute => 1751, - Iir_Kind_Pos_Attribute => 1757, - Iir_Kind_Val_Attribute => 1763, - Iir_Kind_Succ_Attribute => 1769, - Iir_Kind_Pred_Attribute => 1775, - Iir_Kind_Leftof_Attribute => 1781, - Iir_Kind_Rightof_Attribute => 1787, - Iir_Kind_Delayed_Attribute => 1796, - Iir_Kind_Stable_Attribute => 1805, - Iir_Kind_Quiet_Attribute => 1814, - Iir_Kind_Transaction_Attribute => 1823, - Iir_Kind_Event_Attribute => 1827, - Iir_Kind_Active_Attribute => 1831, - Iir_Kind_Last_Event_Attribute => 1835, - Iir_Kind_Last_Active_Attribute => 1839, - Iir_Kind_Last_Value_Attribute => 1843, - Iir_Kind_Driving_Attribute => 1847, - Iir_Kind_Driving_Value_Attribute => 1851, - Iir_Kind_Behavior_Attribute => 1851, - Iir_Kind_Structure_Attribute => 1851, - Iir_Kind_Simple_Name_Attribute => 1858, - Iir_Kind_Instance_Name_Attribute => 1863, - Iir_Kind_Path_Name_Attribute => 1868, - Iir_Kind_Left_Array_Attribute => 1875, - Iir_Kind_Right_Array_Attribute => 1882, - Iir_Kind_High_Array_Attribute => 1889, - Iir_Kind_Low_Array_Attribute => 1896, - Iir_Kind_Length_Array_Attribute => 1903, - Iir_Kind_Ascending_Array_Attribute => 1910, - Iir_Kind_Range_Array_Attribute => 1917, - Iir_Kind_Reverse_Range_Array_Attribute => 1924, - Iir_Kind_Attribute_Name => 1933 + Iir_Kind_Terminal_Declaration => 674, + Iir_Kind_Free_Quantity_Declaration => 683, + Iir_Kind_Across_Quantity_Declaration => 695, + Iir_Kind_Through_Quantity_Declaration => 707, + Iir_Kind_Enumeration_Literal => 718, + Iir_Kind_Function_Declaration => 743, + Iir_Kind_Procedure_Declaration => 767, + Iir_Kind_Function_Body => 777, + Iir_Kind_Procedure_Body => 788, + Iir_Kind_Object_Alias_Declaration => 799, + Iir_Kind_File_Declaration => 813, + Iir_Kind_Guard_Signal_Declaration => 826, + Iir_Kind_Signal_Declaration => 843, + Iir_Kind_Variable_Declaration => 856, + Iir_Kind_Constant_Declaration => 870, + Iir_Kind_Iterator_Declaration => 881, + Iir_Kind_Interface_Constant_Declaration => 897, + Iir_Kind_Interface_Variable_Declaration => 913, + Iir_Kind_Interface_Signal_Declaration => 934, + Iir_Kind_Interface_File_Declaration => 950, + Iir_Kind_Interface_Type_Declaration => 960, + Iir_Kind_Interface_Package_Declaration => 972, + Iir_Kind_Interface_Function_Declaration => 989, + Iir_Kind_Interface_Procedure_Declaration => 1002, + Iir_Kind_Signal_Attribute_Declaration => 1005, + Iir_Kind_Identity_Operator => 1009, + Iir_Kind_Negation_Operator => 1013, + Iir_Kind_Absolute_Operator => 1017, + Iir_Kind_Not_Operator => 1021, + Iir_Kind_Implicit_Condition_Operator => 1025, + Iir_Kind_Condition_Operator => 1029, + Iir_Kind_Reduction_And_Operator => 1033, + Iir_Kind_Reduction_Or_Operator => 1037, + Iir_Kind_Reduction_Nand_Operator => 1041, + Iir_Kind_Reduction_Nor_Operator => 1045, + Iir_Kind_Reduction_Xor_Operator => 1049, + Iir_Kind_Reduction_Xnor_Operator => 1053, + Iir_Kind_And_Operator => 1058, + Iir_Kind_Or_Operator => 1063, + Iir_Kind_Nand_Operator => 1068, + Iir_Kind_Nor_Operator => 1073, + Iir_Kind_Xor_Operator => 1078, + Iir_Kind_Xnor_Operator => 1083, + Iir_Kind_Equality_Operator => 1088, + Iir_Kind_Inequality_Operator => 1093, + Iir_Kind_Less_Than_Operator => 1098, + Iir_Kind_Less_Than_Or_Equal_Operator => 1103, + Iir_Kind_Greater_Than_Operator => 1108, + Iir_Kind_Greater_Than_Or_Equal_Operator => 1113, + Iir_Kind_Match_Equality_Operator => 1118, + Iir_Kind_Match_Inequality_Operator => 1123, + Iir_Kind_Match_Less_Than_Operator => 1128, + Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1133, + Iir_Kind_Match_Greater_Than_Operator => 1138, + Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1143, + Iir_Kind_Sll_Operator => 1148, + Iir_Kind_Sla_Operator => 1153, + Iir_Kind_Srl_Operator => 1158, + Iir_Kind_Sra_Operator => 1163, + Iir_Kind_Rol_Operator => 1168, + Iir_Kind_Ror_Operator => 1173, + Iir_Kind_Addition_Operator => 1178, + Iir_Kind_Substraction_Operator => 1183, + Iir_Kind_Concatenation_Operator => 1188, + Iir_Kind_Multiplication_Operator => 1193, + Iir_Kind_Division_Operator => 1198, + Iir_Kind_Modulus_Operator => 1203, + Iir_Kind_Remainder_Operator => 1208, + Iir_Kind_Exponentiation_Operator => 1213, + Iir_Kind_Function_Call => 1221, + Iir_Kind_Aggregate => 1228, + Iir_Kind_Parenthesis_Expression => 1231, + Iir_Kind_Qualified_Expression => 1235, + Iir_Kind_Type_Conversion => 1240, + Iir_Kind_Allocator_By_Expression => 1244, + Iir_Kind_Allocator_By_Subtype => 1249, + Iir_Kind_Selected_Element => 1257, + Iir_Kind_Dereference => 1262, + Iir_Kind_Implicit_Dereference => 1267, + Iir_Kind_Slice_Name => 1274, + Iir_Kind_Indexed_Name => 1280, + Iir_Kind_Psl_Expression => 1282, + Iir_Kind_Sensitized_Process_Statement => 1303, + Iir_Kind_Process_Statement => 1323, + Iir_Kind_Concurrent_Simple_Signal_Assignment => 1335, + Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1347, + Iir_Kind_Concurrent_Selected_Signal_Assignment => 1360, + Iir_Kind_Concurrent_Assertion_Statement => 1368, + Iir_Kind_Concurrent_Procedure_Call_Statement => 1375, + Iir_Kind_Psl_Assert_Statement => 1388, + Iir_Kind_Psl_Cover_Statement => 1401, + Iir_Kind_Block_Statement => 1414, + Iir_Kind_If_Generate_Statement => 1425, + Iir_Kind_Case_Generate_Statement => 1434, + Iir_Kind_For_Generate_Statement => 1443, + Iir_Kind_Component_Instantiation_Statement => 1454, + Iir_Kind_Psl_Default_Clock => 1458, + Iir_Kind_Simple_Simultaneous_Statement => 1465, + Iir_Kind_Generate_Statement_Body => 1476, + Iir_Kind_If_Generate_Else_Clause => 1482, + Iir_Kind_Simple_Signal_Assignment_Statement => 1492, + Iir_Kind_Conditional_Signal_Assignment_Statement => 1502, + Iir_Kind_Selected_Waveform_Assignment_Statement => 1513, + Iir_Kind_Null_Statement => 1517, + Iir_Kind_Assertion_Statement => 1524, + Iir_Kind_Report_Statement => 1530, + Iir_Kind_Wait_Statement => 1538, + Iir_Kind_Variable_Assignment_Statement => 1545, + Iir_Kind_Conditional_Variable_Assignment_Statement => 1552, + Iir_Kind_Return_Statement => 1558, + Iir_Kind_For_Loop_Statement => 1567, + Iir_Kind_While_Loop_Statement => 1576, + Iir_Kind_Next_Statement => 1583, + Iir_Kind_Exit_Statement => 1590, + Iir_Kind_Case_Statement => 1598, + Iir_Kind_Procedure_Call_Statement => 1604, + Iir_Kind_If_Statement => 1614, + Iir_Kind_Elsif => 1620, + Iir_Kind_Character_Literal => 1628, + Iir_Kind_Simple_Name => 1636, + Iir_Kind_Selected_Name => 1645, + Iir_Kind_Operator_Symbol => 1651, + Iir_Kind_Reference_Name => 1654, + Iir_Kind_External_Constant_Name => 1663, + Iir_Kind_External_Signal_Name => 1672, + Iir_Kind_External_Variable_Name => 1681, + Iir_Kind_Selected_By_All_Name => 1687, + Iir_Kind_Parenthesis_Name => 1692, + Iir_Kind_Package_Pathname => 1696, + Iir_Kind_Absolute_Pathname => 1697, + Iir_Kind_Relative_Pathname => 1698, + Iir_Kind_Pathname_Element => 1703, + Iir_Kind_Base_Attribute => 1705, + Iir_Kind_Subtype_Attribute => 1710, + Iir_Kind_Element_Attribute => 1715, + Iir_Kind_Left_Type_Attribute => 1720, + Iir_Kind_Right_Type_Attribute => 1725, + Iir_Kind_High_Type_Attribute => 1730, + Iir_Kind_Low_Type_Attribute => 1735, + Iir_Kind_Ascending_Type_Attribute => 1740, + Iir_Kind_Image_Attribute => 1746, + Iir_Kind_Value_Attribute => 1752, + Iir_Kind_Pos_Attribute => 1758, + Iir_Kind_Val_Attribute => 1764, + Iir_Kind_Succ_Attribute => 1770, + Iir_Kind_Pred_Attribute => 1776, + Iir_Kind_Leftof_Attribute => 1782, + Iir_Kind_Rightof_Attribute => 1788, + Iir_Kind_Delayed_Attribute => 1797, + Iir_Kind_Stable_Attribute => 1806, + Iir_Kind_Quiet_Attribute => 1815, + Iir_Kind_Transaction_Attribute => 1824, + Iir_Kind_Event_Attribute => 1828, + Iir_Kind_Active_Attribute => 1832, + Iir_Kind_Last_Event_Attribute => 1836, + Iir_Kind_Last_Active_Attribute => 1840, + Iir_Kind_Last_Value_Attribute => 1844, + Iir_Kind_Driving_Attribute => 1848, + Iir_Kind_Driving_Value_Attribute => 1852, + Iir_Kind_Behavior_Attribute => 1852, + Iir_Kind_Structure_Attribute => 1852, + Iir_Kind_Simple_Name_Attribute => 1859, + Iir_Kind_Instance_Name_Attribute => 1864, + Iir_Kind_Path_Name_Attribute => 1869, + Iir_Kind_Left_Array_Attribute => 1876, + Iir_Kind_Right_Array_Attribute => 1883, + Iir_Kind_High_Array_Attribute => 1890, + Iir_Kind_Low_Array_Attribute => 1897, + Iir_Kind_Length_Array_Attribute => 1904, + Iir_Kind_Ascending_Array_Attribute => 1911, + Iir_Kind_Range_Array_Attribute => 1918, + Iir_Kind_Reverse_Range_Array_Attribute => 1925, + Iir_Kind_Attribute_Name => 1934 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -10554,6 +10555,7 @@ package body Nodes_Meta is case K is when Iir_Kind_Library_Clause | Iir_Kind_Element_Declaration + | Iir_Kind_Terminal_Declaration | Iir_Kind_File_Declaration | Iir_Kind_Signal_Declaration | Iir_Kind_Variable_Declaration diff --git a/src/vhdl/sem_decls.adb b/src/vhdl/sem_decls.adb index ea89ff2fe..2d7f6086b 100644 --- a/src/vhdl/sem_decls.adb +++ b/src/vhdl/sem_decls.adb @@ -828,6 +828,8 @@ package body Sem_Decls is end if; end Sem_Object_Type_From_Value; + -- LAST_DECL is set only if DECL is part of a list of declarations (they + -- share the same type and the same default value). procedure Sem_Object_Declaration (Decl: Iir; Parent : Iir; Last_Decl : Iir) is Deferred_Const : constant Iir := Get_Deferred_Constant (Decl); @@ -847,7 +849,7 @@ package body Sem_Decls is -- Analyze type and default value: Atype := Get_Subtype_Indication (Decl); - if Atype /= Null_Iir then + if Last_Decl = Null_Iir then Atype := Sem_Subtype_Indication (Atype); Set_Subtype_Indication (Decl, Atype); Atype := Get_Type_Of_Subtype_Indication (Atype); @@ -866,6 +868,7 @@ package body Sem_Decls is Default_Value := Eval_Expr_Check_If_Static (Default_Value, Atype); end if; else + pragma Assert (Atype = Null_Iir); Default_Value := Get_Default_Value (Last_Decl); if Is_Valid (Default_Value) then Set_Is_Ref (Decl, True); @@ -2013,6 +2016,7 @@ package body Sem_Decls is procedure Sem_Declaration_Chain (Parent : Iir) is Decl : Iir; + Kind : Iir_Kind; Attr_Spec_Chain : Iir; -- New declaration chain (declarations like implicit signals may be @@ -2043,24 +2047,19 @@ package body Sem_Decls is Last_Obj_Decl := Null_Iir; while Decl /= Null_Iir loop - case Get_Kind (Decl) is + Kind := Get_Kind (Decl); + case Kind is when Iir_Kind_Type_Declaration | Iir_Kind_Anonymous_Type_Declaration => Sem_Type_Declaration (Decl, Is_Global); when Iir_Kind_Subtype_Declaration => Sem_Subtype_Declaration (Decl, Is_Global); - when Iir_Kind_Signal_Declaration => + when Iir_Kind_Signal_Declaration + | Iir_Kind_Constant_Declaration + | Iir_Kind_Variable_Declaration => Sem_Object_Declaration (Decl, Parent, Last_Obj_Decl); - Last_Obj_Decl := Decl; - when Iir_Kind_Constant_Declaration => - Sem_Object_Declaration (Decl, Parent, Last_Obj_Decl); - Last_Obj_Decl := Decl; - when Iir_Kind_Variable_Declaration => - Sem_Object_Declaration (Decl, Parent, Last_Obj_Decl); - Last_Obj_Decl := Decl; when Iir_Kind_File_Declaration => Sem_File_Declaration (Decl, Last_Obj_Decl); - Last_Obj_Decl := Decl; when Iir_Kind_Attribute_Declaration => Sem_Attribute_Declaration (Decl); when Iir_Kind_Attribute_Specification => @@ -2124,11 +2123,9 @@ package body Sem_Decls is Sem_Nature_Declaration (Decl); when Iir_Kind_Terminal_Declaration => Sem_Terminal_Declaration (Decl, Last_Obj_Decl); - Last_Obj_Decl := Decl; when Iir_Kind_Across_Quantity_Declaration | Iir_Kind_Through_Quantity_Declaration => Sem_Branch_Quantity_Declaration (Decl, Last_Obj_Decl); - Last_Obj_Decl := Decl; when Iir_Kind_Psl_Declaration => Sem_Psl.Sem_Psl_Declaration (Decl); @@ -2138,6 +2135,25 @@ package body Sem_Decls is when others => Error_Kind ("sem_declaration_chain", Decl); end case; + + -- For object declarations, set Last_Obj_Decl; otherwise clear it. + case Kind is + when Iir_Kind_Signal_Declaration + | Iir_Kind_Constant_Declaration + | Iir_Kind_Variable_Declaration + | Iir_Kind_File_Declaration + | Iir_Kind_Terminal_Declaration + | Iir_Kind_Across_Quantity_Declaration + | Iir_Kind_Through_Quantity_Declaration => + if Get_Has_Identifier_List (Decl) then + Last_Obj_Decl := Decl; + else + Last_Obj_Decl := Null_Iir; + end if; + when others => + Last_Obj_Decl := Null_Iir; + end case; + if Attr_Spec_Chain /= Null_Iir then Check_Post_Attribute_Specification (Attr_Spec_Chain, Decl); end if; diff --git a/src/vhdl/sem_types.adb b/src/vhdl/sem_types.adb index 98d2343ad..600f29257 100644 --- a/src/vhdl/sem_types.adb +++ b/src/vhdl/sem_types.adb @@ -2309,6 +2309,12 @@ package body Sem_Types is Type_Mark: Iir; Res : Iir; begin + if Def = Null_Iir then + -- Missing subtype indication. + pragma Assert (Flags.Flag_Force_Analysis); + return Create_Error_Type (Null_Iir); + end if; + -- LRM08 6.3 Subtype declarations -- -- If the subtype indication does not include a constraint, the subtype |