OSDN Git Service

2012-10-01 Ed Schonberg <schonberg@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Oct 2012 10:24:00 +0000 (10:24 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 1 Oct 2012 10:24:00 +0000 (10:24 +0000)
* checks.adb: Improve warning message.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@191915 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ada/ChangeLog
gcc/ada/checks.adb

index ddc3f4d..24d56a1 100644 (file)
@@ -1,3 +1,7 @@
+2012-10-01  Ed Schonberg  <schonberg@adacore.com>
+
+       * checks.adb: Improve warning message.
+
 2012-10-01  Robert Dewar  <dewar@adacore.com>
 
        * checks.adb: Minor reformatting.
index 06d3786..219e671 100644 (file)
@@ -2250,11 +2250,20 @@ package body Checks is
          if Present (S) and then Get_TSS_Name (S) /= TSS_Null then
             return;
 
-         --  Check certainly does not apply within the predicate function
-         --  itself, else we have a infinite recursion.
+         --  If the check appears within the predicate function itself, it
+         --  means that the user specified a check whose formal is the
+         --  predicated subtype itself, rather than some covering type. This
+         --  is likely to be a common error, and thus deserves a warning.
 
          elsif S = Predicate_Function (Typ) then
-            return;
+            Error_Msg_N
+              ("predicate check includes a function call that "
+               & "requires a predicate check?", Parent (N));
+            Error_Msg_N
+              ("\this will result in infinite recursion?", Parent (N));
+            Insert_Action (N,
+               Make_Raise_Storage_Error
+                 (Sloc (N), Reason => SE_Infinite_Recursion));
 
          else
             Insert_Action (N,