From 262219200fe35559e926e9123cf968ec62e2419d Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Tue, 18 Oct 2022 07:36:30 +0200 Subject: vhdl-sem_assocs: handle association with external signal names. Fix #2221 --- src/vhdl/vhdl-nodes.ads | 3 ++ src/vhdl/vhdl-nodes_meta.adb | 126 ++++++++++++++++++++++--------------------- src/vhdl/vhdl-sem_assocs.adb | 3 +- src/vhdl/vhdl-sem_names.adb | 8 +++ 4 files changed, 77 insertions(+), 63 deletions(-) (limited to 'src/vhdl') diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index fe74d7796..a82fc46c1 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -4499,6 +4499,9 @@ package Vhdl.Nodes is -- Only for Iir_Kind_External_Variable_Name: -- Get/Set_Shared_Flag (Flag2) -- + -- Only for Iir_Kind_External_Signal_Name: + -- Get/Set_Has_Active_Flag (Flag2) + -- -- Get/Set_Expr_Staticness (State1) -- -- Get/Set_Name_Staticness (State2) diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index 9ddb1a3dd..20ed0a51f 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -4921,6 +4921,7 @@ package body Vhdl.Nodes_Meta is Field_Subtype_Indication, -- Iir_Kind_External_Signal_Name Field_Is_Ref, + Field_Has_Active_Flag, Field_Expr_Staticness, Field_Name_Staticness, Field_Parent, @@ -5613,68 +5614,68 @@ package body Vhdl.Nodes_Meta is Iir_Kind_Operator_Symbol => 2040, Iir_Kind_Reference_Name => 2045, Iir_Kind_External_Constant_Name => 2054, - Iir_Kind_External_Signal_Name => 2063, - Iir_Kind_External_Variable_Name => 2073, - Iir_Kind_Selected_By_All_Name => 2079, - Iir_Kind_Parenthesis_Name => 2084, - Iir_Kind_Package_Pathname => 2088, - Iir_Kind_Absolute_Pathname => 2089, - Iir_Kind_Relative_Pathname => 2090, - Iir_Kind_Pathname_Element => 2095, - Iir_Kind_Base_Attribute => 2097, - Iir_Kind_Subtype_Attribute => 2102, - Iir_Kind_Element_Attribute => 2107, - Iir_Kind_Across_Attribute => 2112, - Iir_Kind_Through_Attribute => 2117, - Iir_Kind_Nature_Reference_Attribute => 2121, - Iir_Kind_Left_Type_Attribute => 2126, - Iir_Kind_Right_Type_Attribute => 2131, - Iir_Kind_High_Type_Attribute => 2136, - Iir_Kind_Low_Type_Attribute => 2141, - Iir_Kind_Ascending_Type_Attribute => 2146, - Iir_Kind_Image_Attribute => 2152, - Iir_Kind_Value_Attribute => 2158, - Iir_Kind_Pos_Attribute => 2164, - Iir_Kind_Val_Attribute => 2170, - Iir_Kind_Succ_Attribute => 2176, - Iir_Kind_Pred_Attribute => 2182, - Iir_Kind_Leftof_Attribute => 2188, - Iir_Kind_Rightof_Attribute => 2194, - Iir_Kind_Signal_Slew_Attribute => 2202, - Iir_Kind_Quantity_Slew_Attribute => 2210, - Iir_Kind_Ramp_Attribute => 2218, - Iir_Kind_Zoh_Attribute => 2226, - Iir_Kind_Ltf_Attribute => 2234, - Iir_Kind_Ztf_Attribute => 2244, - Iir_Kind_Dot_Attribute => 2251, - Iir_Kind_Integ_Attribute => 2258, - Iir_Kind_Quantity_Delayed_Attribute => 2266, - Iir_Kind_Above_Attribute => 2274, - Iir_Kind_Delayed_Attribute => 2283, - Iir_Kind_Stable_Attribute => 2292, - Iir_Kind_Quiet_Attribute => 2301, - Iir_Kind_Transaction_Attribute => 2310, - Iir_Kind_Event_Attribute => 2314, - Iir_Kind_Active_Attribute => 2318, - Iir_Kind_Last_Event_Attribute => 2322, - Iir_Kind_Last_Active_Attribute => 2326, - Iir_Kind_Last_Value_Attribute => 2330, - Iir_Kind_Driving_Attribute => 2334, - Iir_Kind_Driving_Value_Attribute => 2338, - Iir_Kind_Behavior_Attribute => 2338, - Iir_Kind_Structure_Attribute => 2338, - Iir_Kind_Simple_Name_Attribute => 2345, - Iir_Kind_Instance_Name_Attribute => 2350, - Iir_Kind_Path_Name_Attribute => 2355, - Iir_Kind_Left_Array_Attribute => 2362, - Iir_Kind_Right_Array_Attribute => 2369, - Iir_Kind_High_Array_Attribute => 2376, - Iir_Kind_Low_Array_Attribute => 2383, - Iir_Kind_Length_Array_Attribute => 2390, - Iir_Kind_Ascending_Array_Attribute => 2397, - Iir_Kind_Range_Array_Attribute => 2404, - Iir_Kind_Reverse_Range_Array_Attribute => 2411, - Iir_Kind_Attribute_Name => 2420 + Iir_Kind_External_Signal_Name => 2064, + Iir_Kind_External_Variable_Name => 2074, + Iir_Kind_Selected_By_All_Name => 2080, + Iir_Kind_Parenthesis_Name => 2085, + Iir_Kind_Package_Pathname => 2089, + Iir_Kind_Absolute_Pathname => 2090, + Iir_Kind_Relative_Pathname => 2091, + Iir_Kind_Pathname_Element => 2096, + Iir_Kind_Base_Attribute => 2098, + Iir_Kind_Subtype_Attribute => 2103, + Iir_Kind_Element_Attribute => 2108, + Iir_Kind_Across_Attribute => 2113, + Iir_Kind_Through_Attribute => 2118, + Iir_Kind_Nature_Reference_Attribute => 2122, + Iir_Kind_Left_Type_Attribute => 2127, + Iir_Kind_Right_Type_Attribute => 2132, + Iir_Kind_High_Type_Attribute => 2137, + Iir_Kind_Low_Type_Attribute => 2142, + Iir_Kind_Ascending_Type_Attribute => 2147, + Iir_Kind_Image_Attribute => 2153, + Iir_Kind_Value_Attribute => 2159, + Iir_Kind_Pos_Attribute => 2165, + Iir_Kind_Val_Attribute => 2171, + Iir_Kind_Succ_Attribute => 2177, + Iir_Kind_Pred_Attribute => 2183, + Iir_Kind_Leftof_Attribute => 2189, + Iir_Kind_Rightof_Attribute => 2195, + Iir_Kind_Signal_Slew_Attribute => 2203, + Iir_Kind_Quantity_Slew_Attribute => 2211, + Iir_Kind_Ramp_Attribute => 2219, + Iir_Kind_Zoh_Attribute => 2227, + Iir_Kind_Ltf_Attribute => 2235, + Iir_Kind_Ztf_Attribute => 2245, + Iir_Kind_Dot_Attribute => 2252, + Iir_Kind_Integ_Attribute => 2259, + Iir_Kind_Quantity_Delayed_Attribute => 2267, + Iir_Kind_Above_Attribute => 2275, + Iir_Kind_Delayed_Attribute => 2284, + Iir_Kind_Stable_Attribute => 2293, + Iir_Kind_Quiet_Attribute => 2302, + Iir_Kind_Transaction_Attribute => 2311, + Iir_Kind_Event_Attribute => 2315, + Iir_Kind_Active_Attribute => 2319, + Iir_Kind_Last_Event_Attribute => 2323, + Iir_Kind_Last_Active_Attribute => 2327, + Iir_Kind_Last_Value_Attribute => 2331, + Iir_Kind_Driving_Attribute => 2335, + Iir_Kind_Driving_Value_Attribute => 2339, + Iir_Kind_Behavior_Attribute => 2339, + Iir_Kind_Structure_Attribute => 2339, + Iir_Kind_Simple_Name_Attribute => 2346, + Iir_Kind_Instance_Name_Attribute => 2351, + Iir_Kind_Path_Name_Attribute => 2356, + Iir_Kind_Left_Array_Attribute => 2363, + Iir_Kind_Right_Array_Attribute => 2370, + Iir_Kind_High_Array_Attribute => 2377, + Iir_Kind_Low_Array_Attribute => 2384, + Iir_Kind_Length_Array_Attribute => 2391, + Iir_Kind_Ascending_Array_Attribute => 2398, + Iir_Kind_Range_Array_Attribute => 2405, + Iir_Kind_Reverse_Range_Array_Attribute => 2412, + Iir_Kind_Attribute_Name => 2421 ); function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -12281,6 +12282,7 @@ package body Vhdl.Nodes_Meta is when Iir_Kind_Guard_Signal_Declaration | Iir_Kind_Signal_Declaration | Iir_Kind_Interface_Signal_Declaration + | Iir_Kind_External_Signal_Name | Iir_Kind_Delayed_Attribute | Iir_Kind_Stable_Attribute | Iir_Kind_Quiet_Attribute diff --git a/src/vhdl/vhdl-sem_assocs.adb b/src/vhdl/vhdl-sem_assocs.adb index b9d41eeaa..3bf51c400 100644 --- a/src/vhdl/vhdl-sem_assocs.adb +++ b/src/vhdl/vhdl-sem_assocs.adb @@ -268,7 +268,8 @@ package body Vhdl.Sem_Assocs is when Iir_Kind_Interface_Signal_Declaration | Iir_Kind_Signal_Declaration | Iir_Kind_Guard_Signal_Declaration - | Iir_Kinds_Signal_Attribute => + | Iir_Kinds_Signal_Attribute + | Iir_Kind_External_Signal_Name => -- LRM93 2.1.1.2 -- If an actual signal is associated with -- a signal parameter of any mode, the actual diff --git a/src/vhdl/vhdl-sem_names.adb b/src/vhdl/vhdl-sem_names.adb index 0a6b58921..1a3654f42 100644 --- a/src/vhdl/vhdl-sem_names.adb +++ b/src/vhdl/vhdl-sem_names.adb @@ -5079,6 +5079,14 @@ package body Vhdl.Sem_Names is Set_Expr_Staticness (Name, None); + case Iir_Kinds_External_Name (Get_Kind (Name)) is + when Iir_Kind_External_Signal_Name => + -- By default. + Set_Has_Active_Flag (Name, True); + when others => + null; + end case; + -- Consider the node as analyzed. Set_Named_Entity (Name, Name); end Sem_External_Name; -- cgit v1.2.3