diff options
author | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-02 17:00:07 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2011-08-02 17:00:07 +0200 |
commit | c7b9d548d3533d6b48dcdfb882e5ce424f3d53c4 (patch) | |
tree | 7c103ec324c6cd435eba748f5cb247d9dbf56a77 /gcc/ada/sem_ch6.adb | |
parent | 1138cf593bb768234faf88f77ca26db0184b5d29 (diff) | |
download | gcc-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.adb | 19 |
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; |