From c68d70e8bda9423f502351e88e464803f73941b4 Mon Sep 17 00:00:00 2001 From: Arnaud Charlet Date: Sun, 23 Feb 2020 13:50:18 -0500 Subject: [PATCH] [Ada] Ada2020: AI12-0301 Predicates and Default_Value 2020-06-09 Arnaud Charlet gcc/ada/ * sem_util.ads, sem_util.adb (Is_Partially_Initialized_Type): Take Default_Value and Default_Component_Value into account. * sem_ch3.adb (Analyze_Object_Declaration): Update comment. --- gcc/ada/sem_ch3.adb | 6 ++++-- gcc/ada/sem_util.adb | 7 ++++--- gcc/ada/sem_util.ads | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index c9dac2c438a..7882cb803f9 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4366,8 +4366,10 @@ package body Sem_Ch3 is -- We need a predicate check if the type has predicates that are not -- ignored, and if either there is an initializing expression, or for -- default initialization when we have at least one case of an explicit - -- default initial value and then this is not an internal declaration - -- whose initialization comes later (as for an aggregate expansion). + -- default initial value (including via a Default_Value or + -- Default_Component_Value aspect, see AI12-0301) and then this is not + -- an internal declaration whose initialization comes later (as for an + -- aggregate expansion). -- If expression is an aggregate it may be expanded into assignments -- and the declaration itself is marked with No_Initialization, but -- the predicate still applies. diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index f359fa27f56..a5a58157c7e 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -16863,7 +16863,7 @@ package body Sem_Util is is begin if Is_Scalar_Type (Typ) then - return False; + return Has_Default_Aspect (Base_Type (Typ)); elsif Is_Access_Type (Typ) then return Include_Implicit; @@ -16872,8 +16872,9 @@ package body Sem_Util is -- If component type is partially initialized, so is array type - if Is_Partially_Initialized_Type - (Component_Type (Typ), Include_Implicit) + if Has_Default_Aspect (Base_Type (Typ)) + or else Is_Partially_Initialized_Type + (Component_Type (Typ), Include_Implicit) then return True; diff --git a/gcc/ada/sem_util.ads b/gcc/ada/sem_util.ads index ba4c2898476..2dfe34d305b 100644 --- a/gcc/ada/sem_util.ads +++ b/gcc/ada/sem_util.ads @@ -1872,7 +1872,8 @@ package Sem_Util is -- Typ is a type entity. This function returns true if this type is partly -- initialized, meaning that an object of the type is at least partly -- initialized (in particular in the record case, that at least one - -- component has an initialization expression). Note that initialization + -- component has an initialization expression, including via Default_Value + -- and Default_Component_Value aspects). Note that initialization -- resulting from the use of pragma Normalize_Scalars does not count. -- Include_Implicit controls whether implicit initialization of access -- values to null, and of discriminant values, is counted as making the -- 2.30.2