[gcc r11-1928] [Ada] Disallow Predicate_Failure without predicate

Pierre-Marie de Rodat pmderodat@gcc.gnu.org
Wed Jul 8 14:57:21 GMT 2020


https://gcc.gnu.org/g:6091c2e0fa1836c6607562d273a529db5535c3d8

commit r11-1928-g6091c2e0fa1836c6607562d273a529db5535c3d8
Author: Bob Duff <duff@adacore.com>
Date:   Tue May 19 09:23:21 2020 -0400

    [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.

Diff:
---
 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


More information about the Gcc-cvs mailing list