aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/exp_aggr.adb
diff options
context:
space:
mode:
authorBob Duff <duff@adacore.com>2019-08-20 09:50:24 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-20 09:50:24 +0000
commitd4e4e88a4c1b13bc480603ad96672ce079e32ffb (patch)
treed80df430cc29541eb81fd0f218dd73c10d28f927 /gcc/ada/exp_aggr.adb
parentcf0e5ca723edbb63719ca075fce3f84eb8e43553 (diff)
downloadgcc-d4e4e88a4c1b13bc480603ad96672ce079e32ffb.zip
gcc-d4e4e88a4c1b13bc480603ad96672ce079e32ffb.tar.gz
gcc-d4e4e88a4c1b13bc480603ad96672ce079e32ffb.tar.bz2
[Ada] Improve efficiency of aggregates with <>
The generated code has been improved so that aggregates with <> are more efficient. No change in behavior; no test. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * exp_aggr.adb (Expand_Array_Aggregate): Use build-in-place in the nonlimited case in STEP 4. This improves the efficiency of things like (1 .. 1000 => <>). We still generate some code for that, unfortunately, but it is much improved. (Aggr_Assignment_OK_For_Backend): Return false if <> components are present. From-SVN: r274739
Diffstat (limited to 'gcc/ada/exp_aggr.adb')
-rw-r--r--gcc/ada/exp_aggr.adb10
1 files changed, 7 insertions, 3 deletions
diff --git a/gcc/ada/exp_aggr.adb b/gcc/ada/exp_aggr.adb
index c3eba3c..7f11b41 100644
--- a/gcc/ada/exp_aggr.adb
+++ b/gcc/ada/exp_aggr.adb
@@ -5233,6 +5233,12 @@ package body Exp_Aggr is
Value : Uint;
begin
+ -- Back end doesn't know about <>
+
+ if Has_Default_Init_Comps (N) then
+ return False;
+ end if;
+
-- Recurse as far as possible to find the innermost component type
Ctyp := Etype (N);
@@ -6292,9 +6298,7 @@ package body Exp_Aggr is
-- previously excluded controlled components but this is an old
-- oversight: the rules in 7.6 (17) are clear.
- if (not Has_Default_Init_Comps (N)
- or else Is_Limited_Type (Etype (N)))
- and then Comes_From_Source (Parent_Node)
+ if Comes_From_Source (Parent_Node)
and then Parent_Kind = N_Object_Declaration
and then Present (Expression (Parent_Node))
and then not