aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/sem_ch6.adb
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@gcc.gnu.org>2011-08-02 17:00:07 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2011-08-02 17:00:07 +0200
commitc7b9d548d3533d6b48dcdfb882e5ce424f3d53c4 (patch)
tree7c103ec324c6cd435eba748f5cb247d9dbf56a77 /gcc/ada/sem_ch6.adb
parent1138cf593bb768234faf88f77ca26db0184b5d29 (diff)
downloadgcc-c7b9d548d3533d6b48dcdfb882e5ce424f3d53c4.zip
gcc-c7b9d548d3533d6b48dcdfb882e5ce424f3d53c4.tar.gz
gcc-c7b9d548d3533d6b48dcdfb882e5ce424f3d53c4.tar.bz2
[multiple changes]
2011-08-02 Gary Dismukes <dismukes@adacore.com> * sem_ch6.adb (Check_Conformance): Revise the check for nonconforming null exclusions to test Can_Never_Be_Null on the anonymous access types of the formals rather than testing the formals themselves. Exclude this check in cases where the Old_Formal is marked as a controlling formal, to avoid issuing spurious errors for bodies completing dispatching operations (due to the flag not getting set on controlling access formals in body specs). (Find_Corresponding_Spec): When checking full and subtype conformance of subprogram bodies in instances, pass Designated and E in that order, for consistency with the expected order of the formals (New_Id followed by Old_Id). 2011-08-02 Robert Dewar <dewar@adacore.com> * sem_ch8.adb: Minor reformatting. From-SVN: r177172
Diffstat (limited to 'gcc/ada/sem_ch6.adb')
-rw-r--r--gcc/ada/sem_ch6.adb19
1 files changed, 13 insertions, 6 deletions
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 3427897..ca7c005 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
--- Copyright (C) 1992-2010, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2011, Free Software Foundation, Inc. --
-- --
-- GNAT is free software; you can redistribute it and/or modify it under --
-- terms of the GNU General Public License as published by the Free Soft- --
@@ -4144,14 +4144,21 @@ package body Sem_Ch6 is
-- Ada 2005 (AI-231): In case of anonymous access types check
-- the null-exclusion and access-to-constant attributes must
- -- match.
+ -- match. For null exclusion, we test the types rather than the
+ -- formals themselves, since the attribute is only set reliably
+ -- on the formals in the Ada 95 case, and we exclude the case
+ -- where Old_Formal is marked as controlling, to avoid errors
+ -- when matching completing bodies with dispatching declarations
+ -- (access formals in the bodies aren't marked Can_Never_Be_Null).
if Ada_Version >= Ada_2005
and then Ekind (Etype (Old_Formal)) = E_Anonymous_Access_Type
and then Ekind (Etype (New_Formal)) = E_Anonymous_Access_Type
and then
- (Can_Never_Be_Null (Old_Formal) /=
- Can_Never_Be_Null (New_Formal)
+ ((Can_Never_Be_Null (Etype (Old_Formal)) /=
+ Can_Never_Be_Null (Etype (New_Formal))
+ and then
+ not Is_Controlling_Formal (Old_Formal))
or else
Is_Access_Constant (Etype (Old_Formal)) /=
Is_Access_Constant (Etype (New_Formal)))
@@ -6250,11 +6257,11 @@ package body Sem_Ch6 is
if Nkind (N) = N_Subprogram_Body
and then Present (Homonym (E))
- and then not Fully_Conformant (E, Designator)
+ and then not Fully_Conformant (Designator, E)
then
goto Next_Entity;
- elsif not Subtype_Conformant (E, Designator) then
+ elsif not Subtype_Conformant (Designator, E) then
goto Next_Entity;
end if;
end if;