aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2008-08-06 11:35:17 +0200
committerArnaud Charlet <charlet@gcc.gnu.org>2008-08-06 11:35:17 +0200
commit49d8b8028170af3242cb705fe2fabf46697843c1 (patch)
tree786dc57f45902b0dbd0b3d295c5241210bb656d9 /gcc
parent66aa7643363c7c7b6246649b35f5e6a6b7948c6b (diff)
downloadgcc-49d8b8028170af3242cb705fe2fabf46697843c1.zip
gcc-49d8b8028170af3242cb705fe2fabf46697843c1.tar.gz
gcc-49d8b8028170af3242cb705fe2fabf46697843c1.tar.bz2
sem_ch3.adb (Access_Subprogram_Declaration): If the return type is incomplete...
2008-08-06 Ed Schonberg <schonberg@adacore.com> * sem_ch3.adb (Access_Subprogram_Declaration): If the return type is incomplete, add the access_to_subprogram type to the list of private dependents only if the incomplete type will be completed in the current scope. (Build_Discriminant_Constraints): If the type of the discriminant is access_to_variable, reject a constraint that is access_to_constant. From-SVN: r138784
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ada/sem_ch3.adb16
1 files changed, 15 insertions, 1 deletions
diff --git a/gcc/ada/sem_ch3.adb b/gcc/ada/sem_ch3.adb
index 00580bf..bc16c08 100644
--- a/gcc/ada/sem_ch3.adb
+++ b/gcc/ada/sem_ch3.adb
@@ -1179,8 +1179,13 @@ package body Sem_Ch3 is
end loop;
end if;
+ -- If the return type is incomplete, this is legal as long as the
+ -- type is declared in the current scope and will be completed in
+ -- it (rather than being part of limited view).
+
if Ekind (Etype (Desig_Type)) = E_Incomplete_Type
and then not Has_Delayed_Freeze (Desig_Type)
+ and then In_Open_Scopes (Scope (Etype (Desig_Type)))
then
Append_Elmt (Desig_Type, Private_Dependents (Etype (Desig_Type)));
Set_Has_Delayed_Freeze (Desig_Type);
@@ -2567,7 +2572,7 @@ package body Sem_Ch3 is
and then Is_Access_Constant (Etype (E))
then
Error_Msg_N
- ("object that is an access to variable cannot be initialized " &
+ ("access to variable cannot be initialized " &
"with an access-to-constant expression", E);
end if;
@@ -7622,6 +7627,15 @@ package body Sem_Ch3 is
(Designated_Type (Etype (Discr_Expr (J))))
then
Wrong_Type (Discr_Expr (J), Etype (Discr));
+
+ elsif Is_Access_Type (Etype (Discr))
+ and then not Is_Access_Constant (Etype (Discr))
+ and then Is_Access_Type (Etype (Discr_Expr (J)))
+ and then Is_Access_Constant (Etype (Discr_Expr (J)))
+ then
+ Error_Msg_NE
+ ("constraint for discriminant& must be access to variable",
+ Def, Discr);
end if;
end if;