]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Fri, 12 Apr 2013 13:15:12 +0000 (15:15 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 12 Apr 2013 13:15:12 +0000 (15:15 +0200)
2013-04-12  Arnaud Charlet  <charlet@adacore.com>

* sem_prag.adb (Set_Imported): Do not generate error for multiple
Import in CodePeer mode.
* s-rident.ads: Fix minor typo.

2013-04-12  Ed Schonberg  <schonberg@adacore.com>

* checks.adb (Insert_Valid_Check): Do not insert validity check
in the body of the generated predicate function, to prevent
infinite recursion.

From-SVN: r197908

gcc/ada/ChangeLog
gcc/ada/checks.adb
gcc/ada/s-rident.ads
gcc/ada/sem_prag.adb

index cba7cf98bde7f21af9a19bcd2f3ecda91ae11d3e..e524d1c7a2778c33e4816ff77277e377928ad51b 100644 (file)
@@ -1,3 +1,15 @@
+2013-04-12  Arnaud Charlet  <charlet@adacore.com>
+
+       * sem_prag.adb (Set_Imported): Do not generate error for multiple
+       Import in CodePeer mode.
+       * s-rident.ads: Fix minor typo.
+
+2013-04-12  Ed Schonberg  <schonberg@adacore.com>
+
+       * checks.adb (Insert_Valid_Check): Do not insert validity check
+       in the body of the generated predicate function, to prevent
+       infinite recursion.
+
 2013-04-12  Ed Schonberg  <schonberg@adacore.com>
 
        * s-rident.ads: Add various missing Ada 2012 restrictions:
index 39325af1e25215538b69d781104cb93a0f79d3f4..c8d900f9174d6b3e5c777f5f257e946615572c33 100644 (file)
@@ -6228,6 +6228,7 @@ package body Checks is
 
    procedure Insert_Valid_Check (Expr : Node_Id) is
       Loc : constant Source_Ptr := Sloc (Expr);
+      Typ : constant Entity_Id  := Etype (Expr);
       Exp : Node_Id;
 
    begin
@@ -6241,6 +6242,16 @@ package body Checks is
          return;
       end if;
 
+      --  Do not insert checks within a predicate function.  This will arise
+      --  if the current unit and the predicate function are  being compiled
+      --  with  validity checks enabled.
+
+      if Present (Predicate_Function (Typ))
+        and then Current_Scope = Predicate_Function (Typ)
+      then
+         return;
+      end if;
+
       --  If we have a checked conversion, then validity check applies to
       --  the expression inside the conversion, not the result, since if
       --  the expression inside is valid, then so is the conversion result.
index 66a8cf4119e336b21e35a0b3217ddb4f8a194473..480c5a573a4517b202ccaa1c1a6356b0168c9c95 100644 (file)
@@ -65,7 +65,7 @@
 --  The latest implementation avoids both this problem by using a named
 --  scheme for recording restrictions, rather than a positional scheme which
 --  fails completely if restrictions are added or subtracted. Now the worst
---  that happens at bind time in incosistent builds is that unrecognized
+--  that happens at bind time in inconsistent builds is that unrecognized
 --  restrictions are ignored, and the consistency checking for restrictions
 --  might be incomplete, which is no big deal.
 
index ee9388521b39a425d38e31c3f207528276d7a3f6..a8d3fe589b91ac44da5bde56c65297171b6f9ccf 100644 (file)
@@ -6246,6 +6246,12 @@ package body Sem_Prag is
             if Is_Exported (E) then
                Error_Msg_NE ("entity& was previously exported", N, E);
 
+            --  Ignore error in CodePeer mode where we treat all imported
+            --  subprograms as unknown.
+
+            elsif CodePeer_Mode then
+               goto OK;
+
             --  OK if Import/Interface case
 
             elsif Import_Interface_Present (N) then