From 03b6cc3b3e60379f10a4b055e431488ab10a1760 Mon Sep 17 00:00:00 2001 From: Yannick Moy Date: Tue, 27 Jul 2021 12:20:41 +0200 Subject: [PATCH] [Ada] Spurious error on deferred constant with predicate gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): Do not insert a predicate check after a deferred constant declaration. --- gcc/ada/sem_ch3.adb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb index 0e36cc22837..7ba6f7b3bf9 100644 --- a/gcc/ada/sem_ch3.adb +++ b/gcc/ada/sem_ch3.adb @@ -4505,7 +4505,7 @@ package body Sem_Ch3 is -- 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). + -- aggregate expansion) or a deferred constant. -- 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. @@ -4519,6 +4519,7 @@ package body Sem_Ch3 is (Present (E) or else Is_Partially_Initialized_Type (T, Include_Implicit => False)) + and then not (Constant_Present (N) and then No (E)) then -- If the type has a static predicate and the expression is known at -- compile time, see if the expression satisfies the predicate.