diff options
| author | Tristan Gingold <tgingold@free.fr> | 2022-08-10 16:53:11 +0200 | 
|---|---|---|
| committer | Tristan Gingold <tgingold@free.fr> | 2022-08-10 16:53:11 +0200 | 
| commit | aabb982856fed89ebb696127803577fcec036508 (patch) | |
| tree | 69f2803b38b611701e1d26cf2ef2583e1256e554 /src | |
| parent | cb3e7b0f954f91c7a1d4702006b18d0041d6eb0d (diff) | |
| download | ghdl-aabb982856fed89ebb696127803577fcec036508.tar.gz ghdl-aabb982856fed89ebb696127803577fcec036508.tar.bz2 ghdl-aabb982856fed89ebb696127803577fcec036508.zip  | |
vhdl: add Determined_Aggregate_Flag field.  For #2166
Diffstat (limited to 'src')
| -rw-r--r-- | src/vhdl/vhdl-nodes.adb | 16 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes.ads | 7 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.adb | 283 | ||||
| -rw-r--r-- | src/vhdl/vhdl-nodes_meta.ads | 2 | ||||
| -rw-r--r-- | src/vhdl/vhdl-sem_expr.adb | 3 | 
5 files changed, 177 insertions, 134 deletions
diff --git a/src/vhdl/vhdl-nodes.adb b/src/vhdl/vhdl-nodes.adb index f03e1ab92..9a12aae6c 100644 --- a/src/vhdl/vhdl-nodes.adb +++ b/src/vhdl/vhdl-nodes.adb @@ -6528,6 +6528,22 @@ package body Vhdl.Nodes is        Set_Flag1 (Aggr, Flag);     end Set_Aggregate_Expand_Flag; +   function Get_Determined_Aggregate_Flag (Aggr : Iir) return Boolean is +   begin +      pragma Assert (Aggr /= Null_Iir); +      pragma Assert (Has_Determined_Aggregate_Flag (Get_Kind (Aggr)), +                     "no field Determined_Aggregate_Flag"); +      return Get_Flag2 (Aggr); +   end Get_Determined_Aggregate_Flag; + +   procedure Set_Determined_Aggregate_Flag (Aggr : Iir; Flag : Boolean) is +   begin +      pragma Assert (Aggr /= Null_Iir); +      pragma Assert (Has_Determined_Aggregate_Flag (Get_Kind (Aggr)), +                     "no field Determined_Aggregate_Flag"); +      Set_Flag2 (Aggr, Flag); +   end Set_Determined_Aggregate_Flag; +     function Get_Association_Choices_Chain (Target : Iir) return Iir is     begin        pragma Assert (Target /= Null_Iir); diff --git a/src/vhdl/vhdl-nodes.ads b/src/vhdl/vhdl-nodes.ads index 16907b607..f352542a1 100644 --- a/src/vhdl/vhdl-nodes.ads +++ b/src/vhdl/vhdl-nodes.ads @@ -4248,6 +4248,8 @@ package Vhdl.Nodes is     --  If true, the aggregate can be statically built.  This is an optimization     --  and the conditions are defined in sem_expr.     --   Get/Set_Aggregate_Expand_Flag (Flag1) +   -- +   --   Get/Set_Determined_Aggregate_Flag (Flag2)     -- Iir_Kind_Aggregate_Info (Short)     -- @@ -9263,6 +9265,11 @@ package Vhdl.Nodes is     function Get_Aggregate_Expand_Flag (Aggr : Iir) return Boolean;     procedure Set_Aggregate_Expand_Flag (Aggr : Iir; Flag : Boolean); +   --  True if the bounds of the aggregated are determined by the context. +   --  Field: Flag2 +   function Get_Determined_Aggregate_Flag (Aggr : Iir) return Boolean; +   procedure Set_Determined_Aggregate_Flag (Aggr : Iir; Flag : Boolean); +     --  Chain of choices.     --  Field: Field4 Chain     function Get_Association_Choices_Chain (Target : Iir) return Iir; diff --git a/src/vhdl/vhdl-nodes_meta.adb b/src/vhdl/vhdl-nodes_meta.adb index e6e3129d3..310f31d86 100644 --- a/src/vhdl/vhdl-nodes_meta.adb +++ b/src/vhdl/vhdl-nodes_meta.adb @@ -335,6 +335,7 @@ package body Vhdl.Nodes_Meta is        Field_Aggr_Others_Flag => Type_Boolean,        Field_Aggr_Named_Flag => Type_Boolean,        Field_Aggregate_Expand_Flag => Type_Boolean, +      Field_Determined_Aggregate_Flag => Type_Boolean,        Field_Association_Choices_Chain => Type_Iir,        Field_Case_Statement_Alternative_Chain => Type_Iir,        Field_Matching_Flag => Type_Boolean, @@ -1044,6 +1045,8 @@ package body Vhdl.Nodes_Meta is              return "aggr_named_flag";           when Field_Aggregate_Expand_Flag =>              return "aggregate_expand_flag"; +         when Field_Determined_Aggregate_Flag => +            return "determined_aggregate_flag";           when Field_Association_Choices_Chain =>              return "association_choices_chain";           when Field_Case_Statement_Alternative_Chain => @@ -2462,6 +2465,8 @@ package body Vhdl.Nodes_Meta is              return Attr_None;           when Field_Aggregate_Expand_Flag =>              return Attr_None; +         when Field_Determined_Aggregate_Flag => +            return Attr_None;           when Field_Association_Choices_Chain =>              return Attr_Chain;           when Field_Case_Statement_Alternative_Chain => @@ -4240,6 +4245,7 @@ package body Vhdl.Nodes_Meta is        Field_Base_Name,        --  Iir_Kind_Aggregate        Field_Aggregate_Expand_Flag, +      Field_Determined_Aggregate_Flag,        Field_Expr_Staticness,        Field_Association_Choices_Chain,        Field_Literal_Subtype, @@ -5512,140 +5518,140 @@ package body Vhdl.Nodes_Meta is        Iir_Kind_Remainder_Operator => 1443,        Iir_Kind_Exponentiation_Operator => 1448,        Iir_Kind_Function_Call => 1456, -      Iir_Kind_Aggregate => 1463, -      Iir_Kind_Parenthesis_Expression => 1466, -      Iir_Kind_Qualified_Expression => 1470, -      Iir_Kind_Type_Conversion => 1475, -      Iir_Kind_Allocator_By_Expression => 1480, -      Iir_Kind_Allocator_By_Subtype => 1486, -      Iir_Kind_Selected_Element => 1494, -      Iir_Kind_Dereference => 1499, -      Iir_Kind_Implicit_Dereference => 1504, -      Iir_Kind_Slice_Name => 1511, -      Iir_Kind_Indexed_Name => 1517, -      Iir_Kind_Psl_Prev => 1523, -      Iir_Kind_Psl_Stable => 1528, -      Iir_Kind_Psl_Rose => 1533, -      Iir_Kind_Psl_Fell => 1538, -      Iir_Kind_Psl_Onehot => 1541, -      Iir_Kind_Psl_Onehot0 => 1544, -      Iir_Kind_Psl_Expression => 1546, -      Iir_Kind_Sensitized_Process_Statement => 1568, -      Iir_Kind_Process_Statement => 1589, -      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1602, -      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1615, -      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1629, -      Iir_Kind_Concurrent_Assertion_Statement => 1637, -      Iir_Kind_Concurrent_Procedure_Call_Statement => 1644, -      Iir_Kind_Concurrent_Break_Statement => 1652, -      Iir_Kind_Psl_Assert_Directive => 1666, -      Iir_Kind_Psl_Assume_Directive => 1678, -      Iir_Kind_Psl_Cover_Directive => 1690, -      Iir_Kind_Psl_Restrict_Directive => 1701, -      Iir_Kind_Block_Statement => 1715, -      Iir_Kind_If_Generate_Statement => 1726, -      Iir_Kind_Case_Generate_Statement => 1735, -      Iir_Kind_For_Generate_Statement => 1744, -      Iir_Kind_Component_Instantiation_Statement => 1755, -      Iir_Kind_Psl_Default_Clock => 1758, -      Iir_Kind_Generate_Statement_Body => 1769, -      Iir_Kind_If_Generate_Else_Clause => 1775, -      Iir_Kind_Simple_Simultaneous_Statement => 1782, -      Iir_Kind_Simultaneous_Null_Statement => 1786, -      Iir_Kind_Simultaneous_Procedural_Statement => 1797, -      Iir_Kind_Simultaneous_Case_Statement => 1806, -      Iir_Kind_Simultaneous_If_Statement => 1815, -      Iir_Kind_Simultaneous_Elsif => 1821, -      Iir_Kind_Simple_Signal_Assignment_Statement => 1832, -      Iir_Kind_Conditional_Signal_Assignment_Statement => 1843, -      Iir_Kind_Selected_Waveform_Assignment_Statement => 1855, -      Iir_Kind_Signal_Force_Assignment_Statement => 1865, -      Iir_Kind_Signal_Release_Assignment_Statement => 1874, -      Iir_Kind_Null_Statement => 1878, -      Iir_Kind_Assertion_Statement => 1885, -      Iir_Kind_Report_Statement => 1891, -      Iir_Kind_Wait_Statement => 1899, -      Iir_Kind_Variable_Assignment_Statement => 1906, -      Iir_Kind_Conditional_Variable_Assignment_Statement => 1913, -      Iir_Kind_Return_Statement => 1919, -      Iir_Kind_For_Loop_Statement => 1930, -      Iir_Kind_While_Loop_Statement => 1941, -      Iir_Kind_Next_Statement => 1948, -      Iir_Kind_Exit_Statement => 1955, -      Iir_Kind_Case_Statement => 1964, -      Iir_Kind_Procedure_Call_Statement => 1970, -      Iir_Kind_Break_Statement => 1977, -      Iir_Kind_If_Statement => 1987, -      Iir_Kind_Suspend_State_Statement => 1991, -      Iir_Kind_Elsif => 1997, -      Iir_Kind_Character_Literal => 2004, -      Iir_Kind_Simple_Name => 2011, -      Iir_Kind_Selected_Name => 2019, -      Iir_Kind_Operator_Symbol => 2024, -      Iir_Kind_Reference_Name => 2029, -      Iir_Kind_External_Constant_Name => 2038, -      Iir_Kind_External_Signal_Name => 2047, -      Iir_Kind_External_Variable_Name => 2057, -      Iir_Kind_Selected_By_All_Name => 2063, -      Iir_Kind_Parenthesis_Name => 2068, -      Iir_Kind_Package_Pathname => 2072, -      Iir_Kind_Absolute_Pathname => 2073, -      Iir_Kind_Relative_Pathname => 2074, -      Iir_Kind_Pathname_Element => 2079, -      Iir_Kind_Base_Attribute => 2081, -      Iir_Kind_Subtype_Attribute => 2086, -      Iir_Kind_Element_Attribute => 2091, -      Iir_Kind_Across_Attribute => 2096, -      Iir_Kind_Through_Attribute => 2101, -      Iir_Kind_Nature_Reference_Attribute => 2105, -      Iir_Kind_Left_Type_Attribute => 2110, -      Iir_Kind_Right_Type_Attribute => 2115, -      Iir_Kind_High_Type_Attribute => 2120, -      Iir_Kind_Low_Type_Attribute => 2125, -      Iir_Kind_Ascending_Type_Attribute => 2130, -      Iir_Kind_Image_Attribute => 2136, -      Iir_Kind_Value_Attribute => 2142, -      Iir_Kind_Pos_Attribute => 2148, -      Iir_Kind_Val_Attribute => 2154, -      Iir_Kind_Succ_Attribute => 2160, -      Iir_Kind_Pred_Attribute => 2166, -      Iir_Kind_Leftof_Attribute => 2172, -      Iir_Kind_Rightof_Attribute => 2178, -      Iir_Kind_Signal_Slew_Attribute => 2186, -      Iir_Kind_Quantity_Slew_Attribute => 2194, -      Iir_Kind_Ramp_Attribute => 2202, -      Iir_Kind_Zoh_Attribute => 2210, -      Iir_Kind_Ltf_Attribute => 2218, -      Iir_Kind_Ztf_Attribute => 2228, -      Iir_Kind_Dot_Attribute => 2235, -      Iir_Kind_Integ_Attribute => 2242, -      Iir_Kind_Quantity_Delayed_Attribute => 2250, -      Iir_Kind_Above_Attribute => 2258, -      Iir_Kind_Delayed_Attribute => 2267, -      Iir_Kind_Stable_Attribute => 2276, -      Iir_Kind_Quiet_Attribute => 2285, -      Iir_Kind_Transaction_Attribute => 2294, -      Iir_Kind_Event_Attribute => 2298, -      Iir_Kind_Active_Attribute => 2302, -      Iir_Kind_Last_Event_Attribute => 2306, -      Iir_Kind_Last_Active_Attribute => 2310, -      Iir_Kind_Last_Value_Attribute => 2314, -      Iir_Kind_Driving_Attribute => 2318, -      Iir_Kind_Driving_Value_Attribute => 2322, -      Iir_Kind_Behavior_Attribute => 2322, -      Iir_Kind_Structure_Attribute => 2322, -      Iir_Kind_Simple_Name_Attribute => 2329, -      Iir_Kind_Instance_Name_Attribute => 2334, -      Iir_Kind_Path_Name_Attribute => 2339, -      Iir_Kind_Left_Array_Attribute => 2346, -      Iir_Kind_Right_Array_Attribute => 2353, -      Iir_Kind_High_Array_Attribute => 2360, -      Iir_Kind_Low_Array_Attribute => 2367, -      Iir_Kind_Length_Array_Attribute => 2374, -      Iir_Kind_Ascending_Array_Attribute => 2381, -      Iir_Kind_Range_Array_Attribute => 2388, -      Iir_Kind_Reverse_Range_Array_Attribute => 2395, -      Iir_Kind_Attribute_Name => 2404 +      Iir_Kind_Aggregate => 1464, +      Iir_Kind_Parenthesis_Expression => 1467, +      Iir_Kind_Qualified_Expression => 1471, +      Iir_Kind_Type_Conversion => 1476, +      Iir_Kind_Allocator_By_Expression => 1481, +      Iir_Kind_Allocator_By_Subtype => 1487, +      Iir_Kind_Selected_Element => 1495, +      Iir_Kind_Dereference => 1500, +      Iir_Kind_Implicit_Dereference => 1505, +      Iir_Kind_Slice_Name => 1512, +      Iir_Kind_Indexed_Name => 1518, +      Iir_Kind_Psl_Prev => 1524, +      Iir_Kind_Psl_Stable => 1529, +      Iir_Kind_Psl_Rose => 1534, +      Iir_Kind_Psl_Fell => 1539, +      Iir_Kind_Psl_Onehot => 1542, +      Iir_Kind_Psl_Onehot0 => 1545, +      Iir_Kind_Psl_Expression => 1547, +      Iir_Kind_Sensitized_Process_Statement => 1569, +      Iir_Kind_Process_Statement => 1590, +      Iir_Kind_Concurrent_Simple_Signal_Assignment => 1603, +      Iir_Kind_Concurrent_Conditional_Signal_Assignment => 1616, +      Iir_Kind_Concurrent_Selected_Signal_Assignment => 1630, +      Iir_Kind_Concurrent_Assertion_Statement => 1638, +      Iir_Kind_Concurrent_Procedure_Call_Statement => 1645, +      Iir_Kind_Concurrent_Break_Statement => 1653, +      Iir_Kind_Psl_Assert_Directive => 1667, +      Iir_Kind_Psl_Assume_Directive => 1679, +      Iir_Kind_Psl_Cover_Directive => 1691, +      Iir_Kind_Psl_Restrict_Directive => 1702, +      Iir_Kind_Block_Statement => 1716, +      Iir_Kind_If_Generate_Statement => 1727, +      Iir_Kind_Case_Generate_Statement => 1736, +      Iir_Kind_For_Generate_Statement => 1745, +      Iir_Kind_Component_Instantiation_Statement => 1756, +      Iir_Kind_Psl_Default_Clock => 1759, +      Iir_Kind_Generate_Statement_Body => 1770, +      Iir_Kind_If_Generate_Else_Clause => 1776, +      Iir_Kind_Simple_Simultaneous_Statement => 1783, +      Iir_Kind_Simultaneous_Null_Statement => 1787, +      Iir_Kind_Simultaneous_Procedural_Statement => 1798, +      Iir_Kind_Simultaneous_Case_Statement => 1807, +      Iir_Kind_Simultaneous_If_Statement => 1816, +      Iir_Kind_Simultaneous_Elsif => 1822, +      Iir_Kind_Simple_Signal_Assignment_Statement => 1833, +      Iir_Kind_Conditional_Signal_Assignment_Statement => 1844, +      Iir_Kind_Selected_Waveform_Assignment_Statement => 1856, +      Iir_Kind_Signal_Force_Assignment_Statement => 1866, +      Iir_Kind_Signal_Release_Assignment_Statement => 1875, +      Iir_Kind_Null_Statement => 1879, +      Iir_Kind_Assertion_Statement => 1886, +      Iir_Kind_Report_Statement => 1892, +      Iir_Kind_Wait_Statement => 1900, +      Iir_Kind_Variable_Assignment_Statement => 1907, +      Iir_Kind_Conditional_Variable_Assignment_Statement => 1914, +      Iir_Kind_Return_Statement => 1920, +      Iir_Kind_For_Loop_Statement => 1931, +      Iir_Kind_While_Loop_Statement => 1942, +      Iir_Kind_Next_Statement => 1949, +      Iir_Kind_Exit_Statement => 1956, +      Iir_Kind_Case_Statement => 1965, +      Iir_Kind_Procedure_Call_Statement => 1971, +      Iir_Kind_Break_Statement => 1978, +      Iir_Kind_If_Statement => 1988, +      Iir_Kind_Suspend_State_Statement => 1992, +      Iir_Kind_Elsif => 1998, +      Iir_Kind_Character_Literal => 2005, +      Iir_Kind_Simple_Name => 2012, +      Iir_Kind_Selected_Name => 2020, +      Iir_Kind_Operator_Symbol => 2025, +      Iir_Kind_Reference_Name => 2030, +      Iir_Kind_External_Constant_Name => 2039, +      Iir_Kind_External_Signal_Name => 2048, +      Iir_Kind_External_Variable_Name => 2058, +      Iir_Kind_Selected_By_All_Name => 2064, +      Iir_Kind_Parenthesis_Name => 2069, +      Iir_Kind_Package_Pathname => 2073, +      Iir_Kind_Absolute_Pathname => 2074, +      Iir_Kind_Relative_Pathname => 2075, +      Iir_Kind_Pathname_Element => 2080, +      Iir_Kind_Base_Attribute => 2082, +      Iir_Kind_Subtype_Attribute => 2087, +      Iir_Kind_Element_Attribute => 2092, +      Iir_Kind_Across_Attribute => 2097, +      Iir_Kind_Through_Attribute => 2102, +      Iir_Kind_Nature_Reference_Attribute => 2106, +      Iir_Kind_Left_Type_Attribute => 2111, +      Iir_Kind_Right_Type_Attribute => 2116, +      Iir_Kind_High_Type_Attribute => 2121, +      Iir_Kind_Low_Type_Attribute => 2126, +      Iir_Kind_Ascending_Type_Attribute => 2131, +      Iir_Kind_Image_Attribute => 2137, +      Iir_Kind_Value_Attribute => 2143, +      Iir_Kind_Pos_Attribute => 2149, +      Iir_Kind_Val_Attribute => 2155, +      Iir_Kind_Succ_Attribute => 2161, +      Iir_Kind_Pred_Attribute => 2167, +      Iir_Kind_Leftof_Attribute => 2173, +      Iir_Kind_Rightof_Attribute => 2179, +      Iir_Kind_Signal_Slew_Attribute => 2187, +      Iir_Kind_Quantity_Slew_Attribute => 2195, +      Iir_Kind_Ramp_Attribute => 2203, +      Iir_Kind_Zoh_Attribute => 2211, +      Iir_Kind_Ltf_Attribute => 2219, +      Iir_Kind_Ztf_Attribute => 2229, +      Iir_Kind_Dot_Attribute => 2236, +      Iir_Kind_Integ_Attribute => 2243, +      Iir_Kind_Quantity_Delayed_Attribute => 2251, +      Iir_Kind_Above_Attribute => 2259, +      Iir_Kind_Delayed_Attribute => 2268, +      Iir_Kind_Stable_Attribute => 2277, +      Iir_Kind_Quiet_Attribute => 2286, +      Iir_Kind_Transaction_Attribute => 2295, +      Iir_Kind_Event_Attribute => 2299, +      Iir_Kind_Active_Attribute => 2303, +      Iir_Kind_Last_Event_Attribute => 2307, +      Iir_Kind_Last_Active_Attribute => 2311, +      Iir_Kind_Last_Value_Attribute => 2315, +      Iir_Kind_Driving_Attribute => 2319, +      Iir_Kind_Driving_Value_Attribute => 2323, +      Iir_Kind_Behavior_Attribute => 2323, +      Iir_Kind_Structure_Attribute => 2323, +      Iir_Kind_Simple_Name_Attribute => 2330, +      Iir_Kind_Instance_Name_Attribute => 2335, +      Iir_Kind_Path_Name_Attribute => 2340, +      Iir_Kind_Left_Array_Attribute => 2347, +      Iir_Kind_Right_Array_Attribute => 2354, +      Iir_Kind_High_Array_Attribute => 2361, +      Iir_Kind_Low_Array_Attribute => 2368, +      Iir_Kind_Length_Array_Attribute => 2375, +      Iir_Kind_Ascending_Array_Attribute => 2382, +      Iir_Kind_Range_Array_Attribute => 2389, +      Iir_Kind_Reverse_Range_Array_Attribute => 2396, +      Iir_Kind_Attribute_Name => 2405       );     function Get_Fields_First (K : Iir_Kind) return Fields_Index is @@ -5776,6 +5782,8 @@ package body Vhdl.Nodes_Meta is              return Get_Aggr_Named_Flag (N);           when Field_Aggregate_Expand_Flag =>              return Get_Aggregate_Expand_Flag (N); +         when Field_Determined_Aggregate_Flag => +            return Get_Determined_Aggregate_Flag (N);           when Field_Matching_Flag =>              return Get_Matching_Flag (N);           when Field_Has_Disconnect_Flag => @@ -5936,6 +5944,8 @@ package body Vhdl.Nodes_Meta is              Set_Aggr_Named_Flag (N, V);           when Field_Aggregate_Expand_Flag =>              Set_Aggregate_Expand_Flag (N, V); +         when Field_Determined_Aggregate_Flag => +            Set_Determined_Aggregate_Flag (N, V);           when Field_Matching_Flag =>              Set_Matching_Flag (N, V);           when Field_Has_Disconnect_Flag => @@ -12026,6 +12036,11 @@ package body Vhdl.Nodes_Meta is        return K = Iir_Kind_Aggregate;     end Has_Aggregate_Expand_Flag; +   function Has_Determined_Aggregate_Flag (K : Iir_Kind) return Boolean is +   begin +      return K = Iir_Kind_Aggregate; +   end Has_Determined_Aggregate_Flag; +     function Has_Association_Choices_Chain (K : Iir_Kind) return Boolean is     begin        return K = Iir_Kind_Aggregate; diff --git a/src/vhdl/vhdl-nodes_meta.ads b/src/vhdl/vhdl-nodes_meta.ads index 940f6d8fb..9d18dcb2d 100644 --- a/src/vhdl/vhdl-nodes_meta.ads +++ b/src/vhdl/vhdl-nodes_meta.ads @@ -379,6 +379,7 @@ package Vhdl.Nodes_Meta is        Field_Aggr_Others_Flag,        Field_Aggr_Named_Flag,        Field_Aggregate_Expand_Flag, +      Field_Determined_Aggregate_Flag,        Field_Association_Choices_Chain,        Field_Case_Statement_Alternative_Chain,        Field_Matching_Flag, @@ -979,6 +980,7 @@ package Vhdl.Nodes_Meta is     function Has_Aggr_Others_Flag (K : Iir_Kind) return Boolean;     function Has_Aggr_Named_Flag (K : Iir_Kind) return Boolean;     function Has_Aggregate_Expand_Flag (K : Iir_Kind) return Boolean; +   function Has_Determined_Aggregate_Flag (K : Iir_Kind) return Boolean;     function Has_Association_Choices_Chain (K : Iir_Kind) return Boolean;     function Has_Case_Statement_Alternative_Chain (K : Iir_Kind)        return Boolean; diff --git a/src/vhdl/vhdl-sem_expr.adb b/src/vhdl/vhdl-sem_expr.adb index d4a8ef84e..2c9bd8645 100644 --- a/src/vhdl/vhdl-sem_expr.adb +++ b/src/vhdl/vhdl-sem_expr.adb @@ -3887,6 +3887,7 @@ package body Vhdl.Sem_Expr is                    Sub_Aggr := Get_Associated_Expr (Choice);                    case Get_Kind (Sub_Aggr) is                       when Iir_Kind_Aggregate => +                        Set_Determined_Aggregate_Flag (Sub_Aggr, Constrained);                          Sem_Array_Aggregate_1                            (Sub_Aggr, A_Type, Infos, Constrained, Dim + 1);                          if not Get_Aggregate_Expand_Flag (Sub_Aggr) then @@ -4405,6 +4406,8 @@ package body Vhdl.Sem_Expr is           Set_Expr_Staticness (Expr, Globally);        end if; +      Set_Determined_Aggregate_Flag (Expr, Constrained); +        Set_Type (Expr, A_Type); -- FIXME: should free old type        case Get_Kind (A_Type) is           when Iir_Kind_Array_Subtype_Definition =>  | 
