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 | |
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')
-rw-r--r-- | gcc/ada/ChangeLog | 18 | ||||
-rw-r--r-- | gcc/ada/sem_ch6.adb | 19 | ||||
-rw-r--r-- | gcc/ada/sem_ch8.adb | 12 |
3 files changed, 37 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ac403b0..02e05f9 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,21 @@ +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. + 2011-08-02 Ed Schonberg <schonberg@adacore.com> * sem_ch8.adb (Analyze_Subprogram_Renaming): new procedure 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; diff --git a/gcc/ada/sem_ch8.adb b/gcc/ada/sem_ch8.adb index a274109..4a1eedd 100644 --- a/gcc/ada/sem_ch8.adb +++ b/gcc/ada/sem_ch8.adb @@ -1622,15 +1622,15 @@ package body Sem_Ch8 is -- class-wide operation whose body is a dispatching call. We replace the -- generated renaming declaration: -- - -- procedure P (X : CT) renames P; + -- procedure P (X : CT) renames P; -- -- by a different renaming and a class-wide operation: -- - -- procedure Pr (X : T) renames P; -- renames primitive operation - -- procedure P (X : CT); -- class-wide operation - -- ... - -- procedure P (X : CT) is begin Pr (X); end; -- dispatching call - + -- procedure Pr (X : T) renames P; -- renames primitive operation + -- procedure P (X : CT); -- class-wide operation + -- ... + -- procedure P (X : CT) is begin Pr (X); end; -- dispatching call + -- -- This rule only applies if there is no explicit visible class-wide -- operation at the point of the instantiation. |