aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2005-12-09 18:21:06 +0100
committerArnaud Charlet <charlet@gcc.gnu.org>2005-12-09 18:21:06 +0100
commitb5bd964f4a698b0c69a6767a35be9df22f1257a5 (patch)
tree0f3db1ac48ad611dcc8fdb4f16c60724161fc62a /gcc
parent5b7f5b7ff963eec025fd52acc80a543d85b5af5b (diff)
downloadgcc-b5bd964f4a698b0c69a6767a35be9df22f1257a5.zip
gcc-b5bd964f4a698b0c69a6767a35be9df22f1257a5.tar.gz
gcc-b5bd964f4a698b0c69a6767a35be9df22f1257a5.tar.bz2
sem_ch12.adb (Subtypes_Match): Handle properly Ada05 arrays of anonymous access types.
2005-12-05 Ed Schonberg <schonberg@adacore.com> * sem_ch12.adb (Subtypes_Match): Handle properly Ada05 arrays of anonymous access types. * sem_eval.adb (Subtypes_Statically_Match): Implement new rules for matching of anonymous access types and anonymous access to subprogram types. 'R'M 4.9.1 (2/2). From-SVN: r108301
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch12.adb16
-rw-r--r--gcc/ada/sem_eval.adb19
2 files changed, 27 insertions, 8 deletions
diff --git a/gcc/ada/sem_ch12.adb b/gcc/ada/sem_ch12.adb
index 470f5ed..5e8e6dc 100644
--- a/gcc/ada/sem_ch12.adb
+++ b/gcc/ada/sem_ch12.adb
@@ -8090,16 +8090,22 @@ package body Sem_Ch12 is
begin
return (Base_Type (T) = Base_Type (Act_T)
--- why is the and then commented out here???
--- and then Is_Constrained (T) = Is_Constrained (Act_T)
and then Subtypes_Statically_Match (T, Act_T))
or else (Is_Class_Wide_Type (Gen_T)
and then Is_Class_Wide_Type (Act_T)
and then
- Subtypes_Match (
- Get_Instance_Of (Root_Type (Gen_T)),
- Root_Type (Act_T)));
+ Subtypes_Match
+ (Get_Instance_Of (Root_Type (Gen_T)),
+ Root_Type (Act_T)))
+
+ or else
+ ((Ekind (Gen_T) = E_Anonymous_Access_Subprogram_Type
+ or else Ekind (Gen_T) = E_Anonymous_Access_Type)
+ and then Ekind (Act_T) = Ekind (Gen_T)
+ and then
+ Subtypes_Statically_Match
+ (Designated_Type (Gen_T), Designated_Type (Act_T)));
end Subtypes_Match;
-----------------------------------------
diff --git a/gcc/ada/sem_eval.adb b/gcc/ada/sem_eval.adb
index d99e042..3e354ec 100644
--- a/gcc/ada/sem_eval.adb
+++ b/gcc/ada/sem_eval.adb
@@ -38,6 +38,7 @@ with Nlists; use Nlists;
with Opt; use Opt;
with Sem; use Sem;
with Sem_Cat; use Sem_Cat;
+with Sem_Ch6; use Sem_Ch6;
with Sem_Ch8; use Sem_Ch8;
with Sem_Res; use Sem_Res;
with Sem_Util; use Sem_Util;
@@ -4056,9 +4057,21 @@ package body Sem_Eval is
end;
elsif Is_Access_Type (T1) then
- return Subtypes_Statically_Match
- (Designated_Type (T1),
- Designated_Type (T2));
+ if Can_Never_Be_Null (T1) /= Can_Never_Be_Null (T2) then
+ return False;
+
+ elsif Ekind (T1) = E_Access_Subprogram_Type then
+ return
+ Subtype_Conformant
+ (Designated_Type (T1),
+ Designated_Type (T1));
+ else
+ return
+ Subtypes_Statically_Match
+ (Designated_Type (T1),
+ Designated_Type (T2))
+ and then Is_Access_Constant (T1) = Is_Access_Constant (T2);
+ end if;
-- All other types definitely match