aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2016-10-04 20:48:53 +0200
committerTristan Gingold <tgingold@free.fr>2016-10-04 20:48:53 +0200
commit05bdcc96e259b338328812f4b3c4fb68f3c13f3c (patch)
tree0186f64c99f067600322f1338be16e1ff5f95057 /src/vhdl
parentdeac06f0a1aee47a6c4504e2a439842584066b84 (diff)
downloadghdl-05bdcc96e259b338328812f4b3c4fb68f3c13f3c.tar.gz
ghdl-05bdcc96e259b338328812f4b3c4fb68f3c13f3c.tar.bz2
ghdl-05bdcc96e259b338328812f4b3c4fb68f3c13f3c.zip
Fix attribute specification with non-static expression
Diffstat (limited to 'src/vhdl')
-rw-r--r--src/vhdl/iirs.ads3
-rw-r--r--src/vhdl/nodes_meta.adb436
-rw-r--r--src/vhdl/sem_specs.adb44
-rw-r--r--src/vhdl/translate/trans-chap5.adb41
-rw-r--r--src/vhdl/translate/trans-chap6.adb17
5 files changed, 293 insertions, 248 deletions
diff --git a/src/vhdl/iirs.ads b/src/vhdl/iirs.ads
index ae194fa8c..6c3ed2bf8 100644
--- a/src/vhdl/iirs.ads
+++ b/src/vhdl/iirs.ads
@@ -697,9 +697,6 @@ package Iirs is
--
-- Get/Set_Parent (Field0)
--
- -- The type can be constrained due to the expression.
- -- Get/Set_Type (Field1)
- --
-- Get/Set_Chain (Field2)
--
-- Get/Set_Entity_Class (Field3)
diff --git a/src/vhdl/nodes_meta.adb b/src/vhdl/nodes_meta.adb
index bfad5ab47..b94f57dcc 100644
--- a/src/vhdl/nodes_meta.adb
+++ b/src/vhdl/nodes_meta.adb
@@ -2419,7 +2419,6 @@ package body Nodes_Meta is
Field_Attribute_Specification_Chain,
Field_Entity_Name_List,
Field_Parent,
- Field_Type,
-- Iir_Kind_Disconnection_Specification
Field_Chain,
Field_Signal_List,
@@ -4278,223 +4277,223 @@ package body Nodes_Meta is
Iir_Kind_Array_Element_Resolution => 215,
Iir_Kind_Record_Resolution => 216,
Iir_Kind_Record_Element_Resolution => 219,
- Iir_Kind_Attribute_Specification => 228,
- Iir_Kind_Disconnection_Specification => 233,
- Iir_Kind_Configuration_Specification => 238,
- Iir_Kind_Access_Type_Definition => 246,
- Iir_Kind_Incomplete_Type_Definition => 254,
- Iir_Kind_Interface_Type_Definition => 261,
- Iir_Kind_File_Type_Definition => 268,
- Iir_Kind_Protected_Type_Declaration => 277,
- Iir_Kind_Record_Type_Definition => 287,
- Iir_Kind_Array_Type_Definition => 299,
- Iir_Kind_Array_Subtype_Definition => 314,
- Iir_Kind_Record_Subtype_Definition => 325,
- Iir_Kind_Access_Subtype_Definition => 333,
- Iir_Kind_Physical_Subtype_Definition => 342,
- Iir_Kind_Floating_Subtype_Definition => 352,
- Iir_Kind_Integer_Subtype_Definition => 361,
- Iir_Kind_Enumeration_Subtype_Definition => 370,
- Iir_Kind_Enumeration_Type_Definition => 379,
- Iir_Kind_Integer_Type_Definition => 385,
- Iir_Kind_Floating_Type_Definition => 391,
- Iir_Kind_Physical_Type_Definition => 400,
- Iir_Kind_Range_Expression => 408,
- Iir_Kind_Protected_Type_Body => 415,
- Iir_Kind_Wildcard_Type_Definition => 420,
- Iir_Kind_Subtype_Definition => 424,
- Iir_Kind_Scalar_Nature_Definition => 428,
- Iir_Kind_Overload_List => 429,
- Iir_Kind_Type_Declaration => 436,
- Iir_Kind_Anonymous_Type_Declaration => 442,
- Iir_Kind_Subtype_Declaration => 450,
- Iir_Kind_Nature_Declaration => 456,
- Iir_Kind_Subnature_Declaration => 462,
- Iir_Kind_Package_Declaration => 477,
- Iir_Kind_Package_Instantiation_Declaration => 489,
- Iir_Kind_Package_Body => 497,
- Iir_Kind_Configuration_Declaration => 506,
- Iir_Kind_Entity_Declaration => 518,
- Iir_Kind_Architecture_Body => 530,
- Iir_Kind_Context_Declaration => 536,
- Iir_Kind_Package_Header => 538,
- Iir_Kind_Unit_Declaration => 547,
- Iir_Kind_Library_Declaration => 554,
- Iir_Kind_Component_Declaration => 564,
- Iir_Kind_Attribute_Declaration => 571,
- Iir_Kind_Group_Template_Declaration => 577,
- Iir_Kind_Group_Declaration => 584,
- Iir_Kind_Element_Declaration => 591,
- Iir_Kind_Non_Object_Alias_Declaration => 599,
- Iir_Kind_Psl_Declaration => 607,
- Iir_Kind_Psl_Endpoint_Declaration => 621,
- Iir_Kind_Terminal_Declaration => 627,
- Iir_Kind_Free_Quantity_Declaration => 636,
- Iir_Kind_Across_Quantity_Declaration => 648,
- Iir_Kind_Through_Quantity_Declaration => 660,
- Iir_Kind_Enumeration_Literal => 671,
- Iir_Kind_Function_Declaration => 695,
- Iir_Kind_Procedure_Declaration => 718,
- Iir_Kind_Function_Body => 728,
- Iir_Kind_Procedure_Body => 739,
- Iir_Kind_Object_Alias_Declaration => 751,
- Iir_Kind_File_Declaration => 766,
- Iir_Kind_Guard_Signal_Declaration => 779,
- Iir_Kind_Signal_Declaration => 796,
- Iir_Kind_Variable_Declaration => 809,
- Iir_Kind_Constant_Declaration => 823,
- Iir_Kind_Iterator_Declaration => 835,
- Iir_Kind_Interface_Constant_Declaration => 851,
- Iir_Kind_Interface_Variable_Declaration => 867,
- Iir_Kind_Interface_Signal_Declaration => 888,
- Iir_Kind_Interface_File_Declaration => 904,
- Iir_Kind_Interface_Type_Declaration => 914,
- Iir_Kind_Interface_Package_Declaration => 924,
- Iir_Kind_Interface_Function_Declaration => 940,
- Iir_Kind_Interface_Procedure_Declaration => 952,
- Iir_Kind_Identity_Operator => 956,
- Iir_Kind_Negation_Operator => 960,
- Iir_Kind_Absolute_Operator => 964,
- Iir_Kind_Not_Operator => 968,
- Iir_Kind_Condition_Operator => 972,
- Iir_Kind_Reduction_And_Operator => 976,
- Iir_Kind_Reduction_Or_Operator => 980,
- Iir_Kind_Reduction_Nand_Operator => 984,
- Iir_Kind_Reduction_Nor_Operator => 988,
- Iir_Kind_Reduction_Xor_Operator => 992,
- Iir_Kind_Reduction_Xnor_Operator => 996,
- Iir_Kind_And_Operator => 1001,
- Iir_Kind_Or_Operator => 1006,
- Iir_Kind_Nand_Operator => 1011,
- Iir_Kind_Nor_Operator => 1016,
- Iir_Kind_Xor_Operator => 1021,
- Iir_Kind_Xnor_Operator => 1026,
- Iir_Kind_Equality_Operator => 1031,
- Iir_Kind_Inequality_Operator => 1036,
- Iir_Kind_Less_Than_Operator => 1041,
- Iir_Kind_Less_Than_Or_Equal_Operator => 1046,
- Iir_Kind_Greater_Than_Operator => 1051,
- Iir_Kind_Greater_Than_Or_Equal_Operator => 1056,
- Iir_Kind_Match_Equality_Operator => 1061,
- Iir_Kind_Match_Inequality_Operator => 1066,
- Iir_Kind_Match_Less_Than_Operator => 1071,
- Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1076,
- Iir_Kind_Match_Greater_Than_Operator => 1081,
- Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1086,
- Iir_Kind_Sll_Operator => 1091,
- Iir_Kind_Sla_Operator => 1096,
- Iir_Kind_Srl_Operator => 1101,
- Iir_Kind_Sra_Operator => 1106,
- Iir_Kind_Rol_Operator => 1111,
- Iir_Kind_Ror_Operator => 1116,
- Iir_Kind_Addition_Operator => 1121,
- Iir_Kind_Substraction_Operator => 1126,
- Iir_Kind_Concatenation_Operator => 1131,
- Iir_Kind_Multiplication_Operator => 1136,
- Iir_Kind_Division_Operator => 1141,
- Iir_Kind_Modulus_Operator => 1146,
- Iir_Kind_Remainder_Operator => 1151,
- Iir_Kind_Exponentiation_Operator => 1156,
- Iir_Kind_Function_Call => 1164,
- Iir_Kind_Aggregate => 1170,
- Iir_Kind_Parenthesis_Expression => 1173,
- Iir_Kind_Qualified_Expression => 1177,
- Iir_Kind_Type_Conversion => 1182,
- Iir_Kind_Allocator_By_Expression => 1186,
- Iir_Kind_Allocator_By_Subtype => 1192,
- Iir_Kind_Selected_Element => 1198,
- Iir_Kind_Dereference => 1203,
- Iir_Kind_Implicit_Dereference => 1208,
- Iir_Kind_Slice_Name => 1215,
- Iir_Kind_Indexed_Name => 1221,
- Iir_Kind_Psl_Expression => 1223,
- Iir_Kind_Sensitized_Process_Statement => 1243,
- Iir_Kind_Process_Statement => 1263,
- Iir_Kind_Concurrent_Simple_Signal_Assignment => 1274,
- Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1285,
- Iir_Kind_Concurrent_Selected_Signal_Assignment => 1297,
- Iir_Kind_Concurrent_Assertion_Statement => 1305,
- Iir_Kind_Concurrent_Procedure_Call_Statement => 1312,
- Iir_Kind_Psl_Assert_Statement => 1325,
- Iir_Kind_Psl_Cover_Statement => 1338,
- Iir_Kind_Block_Statement => 1351,
- Iir_Kind_If_Generate_Statement => 1361,
- Iir_Kind_Case_Generate_Statement => 1370,
- Iir_Kind_For_Generate_Statement => 1379,
- Iir_Kind_Component_Instantiation_Statement => 1389,
- Iir_Kind_Psl_Default_Clock => 1393,
- Iir_Kind_Simple_Simultaneous_Statement => 1400,
- Iir_Kind_Generate_Statement_Body => 1411,
- Iir_Kind_If_Generate_Else_Clause => 1416,
- Iir_Kind_Simple_Signal_Assignment_Statement => 1425,
- Iir_Kind_Conditional_Signal_Assignment_Statement => 1434,
- Iir_Kind_Null_Statement => 1438,
- Iir_Kind_Assertion_Statement => 1445,
- Iir_Kind_Report_Statement => 1451,
- Iir_Kind_Wait_Statement => 1458,
- Iir_Kind_Variable_Assignment_Statement => 1464,
- Iir_Kind_Conditional_Variable_Assignment_Statement => 1470,
- Iir_Kind_Return_Statement => 1476,
- Iir_Kind_For_Loop_Statement => 1485,
- Iir_Kind_While_Loop_Statement => 1493,
- Iir_Kind_Next_Statement => 1499,
- Iir_Kind_Exit_Statement => 1505,
- Iir_Kind_Case_Statement => 1513,
- Iir_Kind_Procedure_Call_Statement => 1519,
- Iir_Kind_If_Statement => 1528,
- Iir_Kind_Elsif => 1533,
- Iir_Kind_Character_Literal => 1540,
- Iir_Kind_Simple_Name => 1547,
- Iir_Kind_Selected_Name => 1555,
- Iir_Kind_Operator_Symbol => 1560,
- Iir_Kind_Selected_By_All_Name => 1565,
- Iir_Kind_Parenthesis_Name => 1569,
- Iir_Kind_External_Constant_Name => 1578,
- Iir_Kind_External_Signal_Name => 1587,
- Iir_Kind_External_Variable_Name => 1596,
- Iir_Kind_Package_Pathname => 1599,
- Iir_Kind_Absolute_Pathname => 1600,
- Iir_Kind_Relative_Pathname => 1601,
- Iir_Kind_Pathname_Element => 1605,
- Iir_Kind_Base_Attribute => 1607,
- Iir_Kind_Left_Type_Attribute => 1612,
- Iir_Kind_Right_Type_Attribute => 1617,
- Iir_Kind_High_Type_Attribute => 1622,
- Iir_Kind_Low_Type_Attribute => 1627,
- Iir_Kind_Ascending_Type_Attribute => 1632,
- Iir_Kind_Image_Attribute => 1638,
- Iir_Kind_Value_Attribute => 1644,
- Iir_Kind_Pos_Attribute => 1650,
- Iir_Kind_Val_Attribute => 1656,
- Iir_Kind_Succ_Attribute => 1662,
- Iir_Kind_Pred_Attribute => 1668,
- Iir_Kind_Leftof_Attribute => 1674,
- Iir_Kind_Rightof_Attribute => 1680,
- Iir_Kind_Delayed_Attribute => 1688,
- Iir_Kind_Stable_Attribute => 1696,
- Iir_Kind_Quiet_Attribute => 1704,
- Iir_Kind_Transaction_Attribute => 1712,
- Iir_Kind_Event_Attribute => 1716,
- Iir_Kind_Active_Attribute => 1720,
- Iir_Kind_Last_Event_Attribute => 1724,
- Iir_Kind_Last_Active_Attribute => 1728,
- Iir_Kind_Last_Value_Attribute => 1732,
- Iir_Kind_Driving_Attribute => 1736,
- Iir_Kind_Driving_Value_Attribute => 1740,
- Iir_Kind_Behavior_Attribute => 1740,
- Iir_Kind_Structure_Attribute => 1740,
- Iir_Kind_Simple_Name_Attribute => 1747,
- Iir_Kind_Instance_Name_Attribute => 1752,
- Iir_Kind_Path_Name_Attribute => 1757,
- Iir_Kind_Left_Array_Attribute => 1764,
- Iir_Kind_Right_Array_Attribute => 1771,
- Iir_Kind_High_Array_Attribute => 1778,
- Iir_Kind_Low_Array_Attribute => 1785,
- Iir_Kind_Length_Array_Attribute => 1792,
- Iir_Kind_Ascending_Array_Attribute => 1799,
- Iir_Kind_Range_Array_Attribute => 1806,
- Iir_Kind_Reverse_Range_Array_Attribute => 1813,
- Iir_Kind_Attribute_Name => 1821
+ Iir_Kind_Attribute_Specification => 227,
+ Iir_Kind_Disconnection_Specification => 232,
+ Iir_Kind_Configuration_Specification => 237,
+ Iir_Kind_Access_Type_Definition => 245,
+ Iir_Kind_Incomplete_Type_Definition => 253,
+ Iir_Kind_Interface_Type_Definition => 260,
+ Iir_Kind_File_Type_Definition => 267,
+ Iir_Kind_Protected_Type_Declaration => 276,
+ Iir_Kind_Record_Type_Definition => 286,
+ Iir_Kind_Array_Type_Definition => 298,
+ Iir_Kind_Array_Subtype_Definition => 313,
+ Iir_Kind_Record_Subtype_Definition => 324,
+ Iir_Kind_Access_Subtype_Definition => 332,
+ Iir_Kind_Physical_Subtype_Definition => 341,
+ Iir_Kind_Floating_Subtype_Definition => 351,
+ Iir_Kind_Integer_Subtype_Definition => 360,
+ Iir_Kind_Enumeration_Subtype_Definition => 369,
+ Iir_Kind_Enumeration_Type_Definition => 378,
+ Iir_Kind_Integer_Type_Definition => 384,
+ Iir_Kind_Floating_Type_Definition => 390,
+ Iir_Kind_Physical_Type_Definition => 399,
+ Iir_Kind_Range_Expression => 407,
+ Iir_Kind_Protected_Type_Body => 414,
+ Iir_Kind_Wildcard_Type_Definition => 419,
+ Iir_Kind_Subtype_Definition => 423,
+ Iir_Kind_Scalar_Nature_Definition => 427,
+ Iir_Kind_Overload_List => 428,
+ Iir_Kind_Type_Declaration => 435,
+ Iir_Kind_Anonymous_Type_Declaration => 441,
+ Iir_Kind_Subtype_Declaration => 449,
+ Iir_Kind_Nature_Declaration => 455,
+ Iir_Kind_Subnature_Declaration => 461,
+ Iir_Kind_Package_Declaration => 476,
+ Iir_Kind_Package_Instantiation_Declaration => 488,
+ Iir_Kind_Package_Body => 496,
+ Iir_Kind_Configuration_Declaration => 505,
+ Iir_Kind_Entity_Declaration => 517,
+ Iir_Kind_Architecture_Body => 529,
+ Iir_Kind_Context_Declaration => 535,
+ Iir_Kind_Package_Header => 537,
+ Iir_Kind_Unit_Declaration => 546,
+ Iir_Kind_Library_Declaration => 553,
+ Iir_Kind_Component_Declaration => 563,
+ Iir_Kind_Attribute_Declaration => 570,
+ Iir_Kind_Group_Template_Declaration => 576,
+ Iir_Kind_Group_Declaration => 583,
+ Iir_Kind_Element_Declaration => 590,
+ Iir_Kind_Non_Object_Alias_Declaration => 598,
+ Iir_Kind_Psl_Declaration => 606,
+ Iir_Kind_Psl_Endpoint_Declaration => 620,
+ Iir_Kind_Terminal_Declaration => 626,
+ Iir_Kind_Free_Quantity_Declaration => 635,
+ Iir_Kind_Across_Quantity_Declaration => 647,
+ Iir_Kind_Through_Quantity_Declaration => 659,
+ Iir_Kind_Enumeration_Literal => 670,
+ Iir_Kind_Function_Declaration => 694,
+ Iir_Kind_Procedure_Declaration => 717,
+ Iir_Kind_Function_Body => 727,
+ Iir_Kind_Procedure_Body => 738,
+ Iir_Kind_Object_Alias_Declaration => 750,
+ Iir_Kind_File_Declaration => 765,
+ Iir_Kind_Guard_Signal_Declaration => 778,
+ Iir_Kind_Signal_Declaration => 795,
+ Iir_Kind_Variable_Declaration => 808,
+ Iir_Kind_Constant_Declaration => 822,
+ Iir_Kind_Iterator_Declaration => 834,
+ Iir_Kind_Interface_Constant_Declaration => 850,
+ Iir_Kind_Interface_Variable_Declaration => 866,
+ Iir_Kind_Interface_Signal_Declaration => 887,
+ Iir_Kind_Interface_File_Declaration => 903,
+ Iir_Kind_Interface_Type_Declaration => 913,
+ Iir_Kind_Interface_Package_Declaration => 923,
+ Iir_Kind_Interface_Function_Declaration => 939,
+ Iir_Kind_Interface_Procedure_Declaration => 951,
+ Iir_Kind_Identity_Operator => 955,
+ Iir_Kind_Negation_Operator => 959,
+ Iir_Kind_Absolute_Operator => 963,
+ Iir_Kind_Not_Operator => 967,
+ Iir_Kind_Condition_Operator => 971,
+ Iir_Kind_Reduction_And_Operator => 975,
+ Iir_Kind_Reduction_Or_Operator => 979,
+ Iir_Kind_Reduction_Nand_Operator => 983,
+ Iir_Kind_Reduction_Nor_Operator => 987,
+ Iir_Kind_Reduction_Xor_Operator => 991,
+ Iir_Kind_Reduction_Xnor_Operator => 995,
+ Iir_Kind_And_Operator => 1000,
+ Iir_Kind_Or_Operator => 1005,
+ Iir_Kind_Nand_Operator => 1010,
+ Iir_Kind_Nor_Operator => 1015,
+ Iir_Kind_Xor_Operator => 1020,
+ Iir_Kind_Xnor_Operator => 1025,
+ Iir_Kind_Equality_Operator => 1030,
+ Iir_Kind_Inequality_Operator => 1035,
+ Iir_Kind_Less_Than_Operator => 1040,
+ Iir_Kind_Less_Than_Or_Equal_Operator => 1045,
+ Iir_Kind_Greater_Than_Operator => 1050,
+ Iir_Kind_Greater_Than_Or_Equal_Operator => 1055,
+ Iir_Kind_Match_Equality_Operator => 1060,
+ Iir_Kind_Match_Inequality_Operator => 1065,
+ Iir_Kind_Match_Less_Than_Operator => 1070,
+ Iir_Kind_Match_Less_Than_Or_Equal_Operator => 1075,
+ Iir_Kind_Match_Greater_Than_Operator => 1080,
+ Iir_Kind_Match_Greater_Than_Or_Equal_Operator => 1085,
+ Iir_Kind_Sll_Operator => 1090,
+ Iir_Kind_Sla_Operator => 1095,
+ Iir_Kind_Srl_Operator => 1100,
+ Iir_Kind_Sra_Operator => 1105,
+ Iir_Kind_Rol_Operator => 1110,
+ Iir_Kind_Ror_Operator => 1115,
+ Iir_Kind_Addition_Operator => 1120,
+ Iir_Kind_Substraction_Operator => 1125,
+ Iir_Kind_Concatenation_Operator => 1130,
+ Iir_Kind_Multiplication_Operator => 1135,
+ Iir_Kind_Division_Operator => 1140,
+ Iir_Kind_Modulus_Operator => 1145,
+ Iir_Kind_Remainder_Operator => 1150,
+ Iir_Kind_Exponentiation_Operator => 1155,
+ Iir_Kind_Function_Call => 1163,
+ Iir_Kind_Aggregate => 1169,
+ Iir_Kind_Parenthesis_Expression => 1172,
+ Iir_Kind_Qualified_Expression => 1176,
+ Iir_Kind_Type_Conversion => 1181,
+ Iir_Kind_Allocator_By_Expression => 1185,
+ Iir_Kind_Allocator_By_Subtype => 1191,
+ Iir_Kind_Selected_Element => 1197,
+ Iir_Kind_Dereference => 1202,
+ Iir_Kind_Implicit_Dereference => 1207,
+ Iir_Kind_Slice_Name => 1214,
+ Iir_Kind_Indexed_Name => 1220,
+ Iir_Kind_Psl_Expression => 1222,
+ Iir_Kind_Sensitized_Process_Statement => 1242,
+ Iir_Kind_Process_Statement => 1262,
+ Iir_Kind_Concurrent_Simple_Signal_Assignment => 1273,
+ Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1284,
+ Iir_Kind_Concurrent_Selected_Signal_Assignment => 1296,
+ Iir_Kind_Concurrent_Assertion_Statement => 1304,
+ Iir_Kind_Concurrent_Procedure_Call_Statement => 1311,
+ Iir_Kind_Psl_Assert_Statement => 1324,
+ Iir_Kind_Psl_Cover_Statement => 1337,
+ Iir_Kind_Block_Statement => 1350,
+ Iir_Kind_If_Generate_Statement => 1360,
+ Iir_Kind_Case_Generate_Statement => 1369,
+ Iir_Kind_For_Generate_Statement => 1378,
+ Iir_Kind_Component_Instantiation_Statement => 1388,
+ Iir_Kind_Psl_Default_Clock => 1392,
+ Iir_Kind_Simple_Simultaneous_Statement => 1399,
+ Iir_Kind_Generate_Statement_Body => 1410,
+ Iir_Kind_If_Generate_Else_Clause => 1415,
+ Iir_Kind_Simple_Signal_Assignment_Statement => 1424,
+ Iir_Kind_Conditional_Signal_Assignment_Statement => 1433,
+ Iir_Kind_Null_Statement => 1437,
+ Iir_Kind_Assertion_Statement => 1444,
+ Iir_Kind_Report_Statement => 1450,
+ Iir_Kind_Wait_Statement => 1457,
+ Iir_Kind_Variable_Assignment_Statement => 1463,
+ Iir_Kind_Conditional_Variable_Assignment_Statement => 1469,
+ Iir_Kind_Return_Statement => 1475,
+ Iir_Kind_For_Loop_Statement => 1484,
+ Iir_Kind_While_Loop_Statement => 1492,
+ Iir_Kind_Next_Statement => 1498,
+ Iir_Kind_Exit_Statement => 1504,
+ Iir_Kind_Case_Statement => 1512,
+ Iir_Kind_Procedure_Call_Statement => 1518,
+ Iir_Kind_If_Statement => 1527,
+ Iir_Kind_Elsif => 1532,
+ Iir_Kind_Character_Literal => 1539,
+ Iir_Kind_Simple_Name => 1546,
+ Iir_Kind_Selected_Name => 1554,
+ Iir_Kind_Operator_Symbol => 1559,
+ Iir_Kind_Selected_By_All_Name => 1564,
+ Iir_Kind_Parenthesis_Name => 1568,
+ Iir_Kind_External_Constant_Name => 1577,
+ Iir_Kind_External_Signal_Name => 1586,
+ Iir_Kind_External_Variable_Name => 1595,
+ Iir_Kind_Package_Pathname => 1598,
+ Iir_Kind_Absolute_Pathname => 1599,
+ Iir_Kind_Relative_Pathname => 1600,
+ Iir_Kind_Pathname_Element => 1604,
+ Iir_Kind_Base_Attribute => 1606,
+ Iir_Kind_Left_Type_Attribute => 1611,
+ Iir_Kind_Right_Type_Attribute => 1616,
+ Iir_Kind_High_Type_Attribute => 1621,
+ Iir_Kind_Low_Type_Attribute => 1626,
+ Iir_Kind_Ascending_Type_Attribute => 1631,
+ Iir_Kind_Image_Attribute => 1637,
+ Iir_Kind_Value_Attribute => 1643,
+ Iir_Kind_Pos_Attribute => 1649,
+ Iir_Kind_Val_Attribute => 1655,
+ Iir_Kind_Succ_Attribute => 1661,
+ Iir_Kind_Pred_Attribute => 1667,
+ Iir_Kind_Leftof_Attribute => 1673,
+ Iir_Kind_Rightof_Attribute => 1679,
+ Iir_Kind_Delayed_Attribute => 1687,
+ Iir_Kind_Stable_Attribute => 1695,
+ Iir_Kind_Quiet_Attribute => 1703,
+ Iir_Kind_Transaction_Attribute => 1711,
+ Iir_Kind_Event_Attribute => 1715,
+ Iir_Kind_Active_Attribute => 1719,
+ Iir_Kind_Last_Event_Attribute => 1723,
+ Iir_Kind_Last_Active_Attribute => 1727,
+ Iir_Kind_Last_Value_Attribute => 1731,
+ Iir_Kind_Driving_Attribute => 1735,
+ Iir_Kind_Driving_Value_Attribute => 1739,
+ Iir_Kind_Behavior_Attribute => 1739,
+ Iir_Kind_Structure_Attribute => 1739,
+ Iir_Kind_Simple_Name_Attribute => 1746,
+ Iir_Kind_Instance_Name_Attribute => 1751,
+ Iir_Kind_Path_Name_Attribute => 1756,
+ Iir_Kind_Left_Array_Attribute => 1763,
+ Iir_Kind_Right_Array_Attribute => 1770,
+ Iir_Kind_High_Array_Attribute => 1777,
+ Iir_Kind_Low_Array_Attribute => 1784,
+ Iir_Kind_Length_Array_Attribute => 1791,
+ Iir_Kind_Ascending_Array_Attribute => 1798,
+ Iir_Kind_Range_Array_Attribute => 1805,
+ Iir_Kind_Reverse_Range_Array_Attribute => 1812,
+ Iir_Kind_Attribute_Name => 1820
);
function Get_Fields (K : Iir_Kind) return Fields_Array
@@ -7117,7 +7116,6 @@ package body Nodes_Meta is
| Iir_Kind_Overflow_Literal
| Iir_Kind_Attribute_Value
| Iir_Kind_Record_Element_Constraint
- | Iir_Kind_Attribute_Specification
| Iir_Kind_Range_Expression
| Iir_Kind_Type_Declaration
| Iir_Kind_Subtype_Declaration
diff --git a/src/vhdl/sem_specs.adb b/src/vhdl/sem_specs.adb
index 7e0c608a1..2d40901fe 100644
--- a/src/vhdl/sem_specs.adb
+++ b/src/vhdl/sem_specs.adb
@@ -186,6 +186,8 @@ package body Sem_Specs is
Check_Defined : Boolean)
is
use Tokens;
+ Attr_Expr : constant Iir := Get_Expression (Attr);
+
El : Iir_Attribute_Value;
-- Attribute declaration corresponding to ATTR.
@@ -294,18 +296,13 @@ package body Sem_Specs is
Set_Name_Staticness (El, None);
Set_Attribute_Specification (El, Attr);
-- FIXME: create an expr_error node?
- declare
- Expr : Iir;
- begin
- Expr := Get_Expression (Attr);
- if Expr = Error_Mark then
- Set_Expr_Staticness (El, Locally);
- else
- Set_Expr_Staticness (El, Get_Expr_Staticness (Expr));
- end if;
- end;
+ if Is_Error (Attr_Expr) then
+ Set_Expr_Staticness (El, Locally);
+ else
+ Set_Expr_Staticness (El, Get_Expr_Staticness (Attr_Expr));
+ end if;
Set_Designated_Entity (El, Decl);
- Set_Type (El, Get_Type (Attr));
+ Set_Type (El, Get_Type (Attr_Expr));
Set_Base_Name (El, El);
-- Put the attribute value in the attribute_value_chain.
@@ -313,6 +310,7 @@ package body Sem_Specs is
Set_Attribute_Value_Chain (Attr_Chain_Parent, El);
-- Put the attribute value in the chain of the attribute specification.
+ -- This is prepended, so in reverse order. Will be reversed later.
Set_Spec_Chain (El, Get_Attribute_Value_Spec_Chain (Attr));
Set_Attribute_Value_Spec_Chain (Attr, El);
@@ -717,7 +715,6 @@ package body Sem_Specs is
-- the same as (or implicitly convertible to) the type mark in the
-- corresponding attribute declaration.
Attr_Type := Get_Type (Attr);
- Set_Type (Spec, Attr_Type);
Expr := Sem_Expression (Get_Expression (Spec), Attr_Type);
if Expr /= Null_Iir then
Check_Read (Expr);
@@ -748,11 +745,11 @@ package body Sem_Specs is
end if;
-- LRM93 3.2.1.1 Index constraints and discrete ranges
- -- - For an attribtue whose value is specified by an attribute
+ -- - For an attribute whose value is specified by an attribute
-- specification, the index ranges are defined by the expression
-- given in the specification, if the subtype of the attribute is
-- unconstrained [...]
- Sem_Decls.Sem_Object_Type_From_Value (Spec, Get_Expression (Spec));
+ -- GHDL: For attribute value.
-- LRM 5.1
-- The entity name list identifies those named entities, both
@@ -807,6 +804,25 @@ package body Sem_Specs is
end loop;
end;
end if;
+
+ -- Reverse the chain of attribute value in specification, so that they
+ -- are in textual order. This is important if the expression is not
+ -- static.
+ declare
+ El : Iir;
+ New_El : Iir;
+ Tmp : Iir;
+ begin
+ El := Get_Attribute_Value_Spec_Chain (Spec);
+ New_El := Null_Iir;
+ while Is_Valid (El) loop
+ Tmp := Get_Spec_Chain (El);
+ Set_Spec_Chain (El, New_El);
+ New_El := El;
+ El := Tmp;
+ end loop;
+ Set_Attribute_Value_Spec_Chain (Spec, New_El);
+ end;
end Sem_Attribute_Specification;
procedure Check_Post_Attribute_Specification
diff --git a/src/vhdl/translate/trans-chap5.adb b/src/vhdl/translate/trans-chap5.adb
index f6a11be0f..7572032af 100644
--- a/src/vhdl/translate/trans-chap5.adb
+++ b/src/vhdl/translate/trans-chap5.adb
@@ -47,12 +47,15 @@ package body Trans.Chap5 is
procedure Translate_Attribute_Specification
(Spec : Iir_Attribute_Specification)
is
- Spec_Type : constant Iir := Get_Type (Spec);
+ Spec_Expr : constant Iir := Get_Expression (Spec);
+ Spec_Type : constant Iir := Get_Type (Spec_Expr);
Attr : constant Iir_Attribute_Declaration :=
Get_Named_Entity (Get_Attribute_Designator (Spec));
Mark : Id_Mark_Type;
Mark2 : Id_Mark_Type;
Info : Object_Info_Acc;
+ Val : Iir;
+ Num : Natural;
begin
Push_Identifier_Prefix_Uniq (Mark);
if Is_Anonymous_Type_Definition (Spec_Type) then
@@ -60,19 +63,39 @@ package body Trans.Chap5 is
Chap3.Translate_Type_Definition (Spec_Type, True);
Pop_Identifier_Prefix (Mark2);
end if;
- Info := Add_Info (Spec, Kind_Object);
- Info.Object_Var := Create_Var
- (Create_Var_Identifier (Attr),
- Chap4.Get_Object_Type (Get_Info (Spec_Type), Mode_Value),
- Global_Storage);
+
+ Num := 1;
+ Val := Get_Attribute_Value_Spec_Chain (Spec);
+ while Is_Valid (Val) loop
+ Info := Add_Info (Val, Kind_Object);
+ Info.Object_Var := Create_Var
+ (Create_Var_Identifier (Attr, "V", Num),
+ Chap4.Get_Object_Type (Get_Info (Spec_Type), Mode_Value),
+ Global_Storage);
+
+ -- Create only one object if the expression is static.
+ exit when Get_Expr_Staticness (Spec_Expr) /= None;
+
+ Val := Get_Spec_Chain (Val);
+ Num := Num + 1;
+ end loop;
Pop_Identifier_Prefix (Mark);
end Translate_Attribute_Specification;
procedure Elab_Attribute_Specification
- (Spec : Iir_Attribute_Specification) is
+ (Spec : Iir_Attribute_Specification)
+ is
+ Expr : constant Iir := Get_Expression (Spec);
+ Val : Iir;
begin
- Chap3.Elab_Object_Subtype (Get_Type (Spec));
- Chap4.Elab_Object_Value (Spec, Get_Expression (Spec));
+ Chap3.Elab_Object_Subtype (Get_Type (Expr));
+
+ Val := Get_Attribute_Value_Spec_Chain (Spec);
+ while Is_Valid (Val) loop
+ Chap4.Elab_Object_Value (Val, Expr);
+ exit when Get_Expr_Staticness (Expr) /= None;
+ Val := Get_Spec_Chain (Val);
+ end loop;
end Elab_Attribute_Specification;
procedure Gen_Elab_Disconnect_Non_Composite (Targ : Mnode;
diff --git a/src/vhdl/translate/trans-chap6.adb b/src/vhdl/translate/trans-chap6.adb
index 51c1a4568..e9f2987dd 100644
--- a/src/vhdl/translate/trans-chap6.adb
+++ b/src/vhdl/translate/trans-chap6.adb
@@ -920,9 +920,20 @@ package body Trans.Chap6 is
return Translate_Name (Get_Named_Entity (Name), Mode);
when Iir_Kind_Attribute_Value =>
pragma Assert (Mode = Mode_Value);
- return Get_Var
- (Get_Info (Get_Attribute_Specification (Name)).Object_Var,
- Type_Info, Mode_Value);
+ declare
+ Attr : constant Iir := Get_Attribute_Specification (Name);
+ Val : Iir;
+ begin
+ if Get_Expr_Staticness (Get_Expression (Attr)) = None then
+ Val := Name;
+ else
+ -- If the expression is static, an object is created only
+ -- for the first value.
+ Val := Get_Attribute_Value_Spec_Chain (Attr);
+ end if;
+ return Get_Var (Get_Info (Val).Object_Var,
+ Type_Info, Mode_Value);
+ end;
when Iir_Kind_Object_Alias_Declaration =>
-- Alias_Var is not like an object variable, since it is