From 6091c2e0fa1836c6607562d273a529db5535c3d8 Mon Sep 17 00:00:00 2001 From: Bob Duff Date: Tue, 19 May 2020 09:23:21 -0400 Subject: [PATCH] [Ada] Disallow Predicate_Failure without predicate gcc/ada/ * sem_ch13.adb (Predicate_Failure): Check that the type has predicates. Remove the setting of Has_Delayed_Aspects and Freeze_Node, because (if the code is legal) it should have already been done by the predicate aspect. --- gcc/ada/sem_ch13.adb | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/gcc/ada/sem_ch13.adb b/gcc/ada/sem_ch13.adb index e440069c7da..2131bb3719a 100644 --- a/gcc/ada/sem_ch13.adb +++ b/gcc/ada/sem_ch13.adb @@ -3120,6 +3120,12 @@ package body Sem_Ch13 is Error_Msg_N ("predicate cannot apply to incomplete view", Aspect); goto Continue; + + elsif not Has_Predicates (E) then + Error_Msg_N + ("Predicate_Failure requires previous predicate" & + " specification", Aspect); + goto Continue; end if; -- Construct the pragma @@ -3132,16 +3138,6 @@ package body Sem_Ch13 is Expression => Relocate_Node (Expr))), Pragma_Name => Name_Predicate_Failure); - -- If the type is private, indicate that its completion - -- has a freeze node, because that is the one that will - -- be visible at freeze time. - - if Is_Private_Type (E) and then Present (Full_View (E)) then - Set_Has_Predicates (Full_View (E)); - Set_Has_Delayed_Aspects (Full_View (E)); - Ensure_Freeze_Node (Full_View (E)); - end if; - -- Case 2b: Aspects corresponding to pragmas with two -- arguments, where the second argument is a local name -- referring to the entity, and the first argument is the -- 2.30.2