aboutsummaryrefslogtreecommitdiffstats
path: root/src/vhdl
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2022-08-10 16:53:11 +0200
committerTristan Gingold <tgingold@free.fr>2022-08-10 16:53:11 +0200
commitaabb982856fed89ebb696127803577fcec036508 (patch)
tree69f2803b38b611701e1d26cf2ef2583e1256e554 /src/vhdl
parentcb3e7b0f954f91c7a1d4702006b18d0041d6eb0d (diff)
downloadghdl-aabb982856fed89ebb696127803577fcec036508.tar.gz
ghdl-aabb982856fed89ebb696127803577fcec036508.tar.bz2
ghdl-aabb982856fed89ebb696127803577fcec036508.zip
vhdl: add Determined_Aggregate_Flag field. For #2166
Diffstat (limited to 'src/vhdl')
-rw-r--r--src/vhdl/vhdl-nodes.adb16
-rw-r--r--src/vhdl/vhdl-nodes.ads7
-rw-r--r--src/vhdl/vhdl-nodes_meta.adb283
-rw-r--r--src/vhdl/vhdl-nodes_meta.ads2
-rw-r--r--src/vhdl/vhdl-sem_expr.adb3
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 =>