Fix detection of non-preelaborable constructs for checking SPARK
elaboration rules, which was tagging deferred constant declarations as
not preelaborable.
Tested on x86_64-pc-linux-gnu, committed on trunk
gcc/ada/
* sem_util.adb (Is_Non_Preelaborable_Construct): Fix for
deferred constants.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -18952,8 +18952,9 @@ package body Sem_Util is
if Has_Init_Expression (Nod) then
Visit (Expression (Nod));
- elsif not Has_Preelaborable_Initialization
- (Etype (Defining_Entity (Nod)))
+ elsif not Constant_Present (Nod)
+ and then not Has_Preelaborable_Initialization
+ (Etype (Defining_Entity (Nod)))
then
raise Non_Preelaborable;
end if;