diff options
author | Javier Miranda <miranda@adacore.com> | 2005-09-05 10:03:00 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2005-09-05 10:03:00 +0200 |
commit | 9cca32af39afce68bdc9c76702b1d31235c257c3 (patch) | |
tree | 7c49e06073d07b49ad2e87f4f0ae0954824a03b0 /gcc/ada/sem_disp.adb | |
parent | 725393ea9114df692c55610f1f8bafe5959395a9 (diff) | |
download | gcc-9cca32af39afce68bdc9c76702b1d31235c257c3.zip gcc-9cca32af39afce68bdc9c76702b1d31235c257c3.tar.gz gcc-9cca32af39afce68bdc9c76702b1d31235c257c3.tar.bz2 |
sem_disp.adb (Check_Controlling_Formals): Anonymous access types used in controlling parameters exclude null because it...
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.
From-SVN: r103885
Diffstat (limited to 'gcc/ada/sem_disp.adb')
-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 11b3da7..96836a7 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 |