diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-05 08:03:00 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-09-05 08:03:00 +0000 |
commit | 7c7c3694d58d8a54028292b68e62363ff4f2aded (patch) | |
tree | 7c49e06073d07b49ad2e87f4f0ae0954824a03b0 /gcc/ada | |
parent | 409a5de10ee7f575ad4f46ce115cd4a4ace10bdc (diff) | |
download | gcc-7c7c3694d58d8a54028292b68e62363ff4f2aded.tar.gz |
2005-09-01 Javier Miranda <miranda@adacore.com>
Ed Schonberg <schonberg@adacore.com>
* sem_disp.adb (Check_Controlling_Formals): Anonymous access types
used in controlling parameters exclude null because it is necessary to
read the tag to dispatch, and null has no tag.
(Override_Dispatching_Operation): If the previous operation is inherited
from an interface, it becomes hidden and does not participate in later
name resolution.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103885 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada')
-rw-r--r-- | gcc/ada/sem_disp.adb | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/gcc/ada/sem_disp.adb b/gcc/ada/sem_disp.adb index 11b3da7f9b5..96836a75915 100644 --- a/gcc/ada/sem_disp.adb +++ b/gcc/ada/sem_disp.adb @@ -115,6 +115,15 @@ package body Sem_Disp is if Ctrl_Type = Typ then Set_Is_Controlling_Formal (Formal); + -- Ada 2005 (AI-231):Anonymous access types used in controlling + -- parameters exclude null because it is necessary to read the + -- tag to dispatch, and null has no tag. + + if Ekind (Etype (Formal)) = E_Anonymous_Access_Type then + Set_Can_Never_Be_Null (Etype (Formal)); + Set_Is_Known_Non_Null (Etype (Formal)); + end if; + -- Check that the parameter's nominal subtype statically -- matches the first subtype. @@ -784,14 +793,7 @@ package body Sem_Disp is then Old_Spec := Corresponding_Spec (Old_Bod); Set_Has_Completion (Old_Spec, False); - - if Exception_Mechanism = Front_End_ZCX_Exceptions then - Set_Has_Subprogram_Descriptor (Old_Spec, False); - Set_Handler_Records (Old_Spec, No_List); - Set_Is_Eliminated (Old_Spec); - end if; end if; - end if; end loop; @@ -1212,10 +1214,12 @@ package body Sem_Disp is return; end if; - -- Ada 2005 (AI-251): Do not replace subprograms corresponding to + -- Ada 2005 (AI-251): Do not replace subprograms inherited from -- abstract interfaces. They will be used later to generate the -- corresponding thunks to initialize the Vtable (see subprogram - -- Freeze_Subprogram) + -- Freeze_Subprogram). The inherited operation itself must also + -- become hidden, to avoid spurious ambiguities; name resolution + -- must pick up only the operation that implements it, if Is_Interface_Subprogram (Prev_Op) then Set_DT_Position (Prev_Op, DT_Position (Alias (Prev_Op))); @@ -1224,6 +1228,7 @@ package body Sem_Disp is Set_Abstract_Interface_Alias (Prev_Op, Alias (Prev_Op)); Set_Alias (Prev_Op, New_Op); Set_Is_Internal (Prev_Op); + Set_Is_Hidden (Prev_Op); -- Override predefined primitive operations |