aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPiotr Trojanek <trojanek@adacore.com>2023-09-07 22:13:51 +0200
committerMarc Poulhiès <poulhies@adacore.com>2023-09-15 15:01:30 +0200
commitd9275e87812a65474be63d565ae4a2eb9a43e9b1 (patch)
treee7e7864de4c237001776a1b1d916d8bc8d22f410 /gcc
parentb96446e0d0afd0d817f6206efabb1deed4e1ed8e (diff)
downloadgcc-d9275e87812a65474be63d565ae4a2eb9a43e9b1.zip
gcc-d9275e87812a65474be63d565ae4a2eb9a43e9b1.tar.gz
gcc-d9275e87812a65474be63d565ae4a2eb9a43e9b1.tar.bz2
ada: Explicitly analyze and expand null array aggregates
Null array aggregates have present but empty lists of expressions and component associations. This confuses the previous code for ordinary array aggregates, which assumes that if a list of either expressions or component associations is present, then it is non-empty. This patch adds explicit handling for null array aggregates to avoid assertion failures in code for ordinary array aggregates. gcc/ada/ * exp_aggr.adb (Build_Array_Aggr_Code): Don't build aggregate code for null array aggregates. * sem_aggr.adb (Resolve_Array_Aggregate): Don't examine formatting of a null array aggregate.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/exp_aggr.adb5
-rw-r--r--gcc/ada/sem_aggr.adb5
2 files changed, 8 insertions, 2 deletions
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index d72e270..165f517 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -1989,7 +1989,10 @@ package body Exp_Aggr is
-- Skip this if no component associations
- if No (Expressions (N)) then
+ if Is_Null_Aggregate (N) then
+ null;
+
+ elsif No (Expressions (N)) then
-- STEP 1 (a): Sort the discrete choices
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb
index e929fea..597c3ce 100644
--- a/gcc/ada/sem_aggr.adb
+++ b/gcc/ada/sem_aggr.adb
@@ -2081,7 +2081,10 @@ package body Sem_Aggr is
-- STEP 1: make sure the aggregate is correctly formatted
- if Present (Component_Associations (N)) then
+ if Is_Null_Aggregate (N) then
+ null;
+
+ elsif Present (Component_Associations (N)) then
-- Verify that all or none of the component associations
-- include an iterator specification.