Commit d515aef3 by Arnaud Charlet

[multiple changes]

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
parent 57f4c288
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> 2013-04-12 Ed Schonberg <schonberg@adacore.com>
* s-rident.ads: Add various missing Ada 2012 restrictions: * s-rident.ads: Add various missing Ada 2012 restrictions:
......
...@@ -6228,6 +6228,7 @@ package body Checks is ...@@ -6228,6 +6228,7 @@ package body Checks is
procedure Insert_Valid_Check (Expr : Node_Id) is procedure Insert_Valid_Check (Expr : Node_Id) is
Loc : constant Source_Ptr := Sloc (Expr); Loc : constant Source_Ptr := Sloc (Expr);
Typ : constant Entity_Id := Etype (Expr);
Exp : Node_Id; Exp : Node_Id;
begin begin
...@@ -6241,6 +6242,16 @@ package body Checks is ...@@ -6241,6 +6242,16 @@ package body Checks is
return; return;
end if; 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 -- If we have a checked conversion, then validity check applies to
-- the expression inside the conversion, not the result, since if -- the expression inside the conversion, not the result, since if
-- the expression inside is valid, then so is the conversion result. -- the expression inside is valid, then so is the conversion result.
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
-- The latest implementation avoids both this problem by using a named -- The latest implementation avoids both this problem by using a named
-- scheme for recording restrictions, rather than a positional scheme which -- scheme for recording restrictions, rather than a positional scheme which
-- fails completely if restrictions are added or subtracted. Now the worst -- 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 -- restrictions are ignored, and the consistency checking for restrictions
-- might be incomplete, which is no big deal. -- might be incomplete, which is no big deal.
......
...@@ -6246,6 +6246,12 @@ package body Sem_Prag is ...@@ -6246,6 +6246,12 @@ package body Sem_Prag is
if Is_Exported (E) then if Is_Exported (E) then
Error_Msg_NE ("entity& was previously exported", N, E); 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 -- OK if Import/Interface case
elsif Import_Interface_Present (N) then elsif Import_Interface_Present (N) then
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment