diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-05-28 15:55:20 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2008-05-28 15:55:20 +0000 |
commit | 5f258fa1a6caccf638178a94d0cdcfc12b448b12 (patch) | |
tree | d3a3a6e7c59a2ff74487d36a4e13f282c67f3d27 /gcc/ada/sem_aggr.adb | |
parent | 69eed9a6e9008d14246b4d04dc741b926c9a077c (diff) | |
download | gcc-5f258fa1a6caccf638178a94d0cdcfc12b448b12.tar.gz |
2008-05-28 Ed Schonberg <schonberg@adacore.com>
* sem_ch5.adb (Analyze_Assignment): If the name is of a local anonymous
access type, wrap the expression in a conversion to force an
accessibility check.
* sem_aggr.adb (Aggegate_Constraint_Checks): Apply conversion to force
accessibility checks even when expansion is disabled in order to
generate messages in the presence of previous errors or in
semantics-only mode.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136108 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/sem_aggr.adb')
-rw-r--r-- | gcc/ada/sem_aggr.adb | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/gcc/ada/sem_aggr.adb b/gcc/ada/sem_aggr.adb index c6a3e25a881..4f50dc01789 100644 --- a/gcc/ada/sem_aggr.adb +++ b/gcc/ada/sem_aggr.adb @@ -414,6 +414,22 @@ package body Sem_Aggr is return; end if; + -- Ada 2005 (AI-230): Generate a conversion to an anonymous access + -- component's type to force the appropriate accessibility checks. + + -- Ada 2005 (AI-231): Generate conversion to the null-excluding + -- type to force the corresponding run-time check + + if Is_Access_Type (Check_Typ) + and then ((Is_Local_Anonymous_Access (Check_Typ)) + or else (Can_Never_Be_Null (Check_Typ) + and then not Can_Never_Be_Null (Exp_Typ))) + then + Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp))); + Analyze_And_Resolve (Exp, Check_Typ); + Check_Unset_Reference (Exp); + end if; + -- This is really expansion activity, so make sure that expansion -- is on and is allowed. @@ -486,20 +502,6 @@ package body Sem_Aggr is Check_Unset_Reference (Exp); end if; - -- Ada 2005 (AI-230): Generate a conversion to an anonymous access - -- component's type to force the appropriate accessibility checks. - - -- Ada 2005 (AI-231): Generate conversion to the null-excluding - -- type to force the corresponding run-time check - - elsif Is_Access_Type (Check_Typ) - and then ((Is_Local_Anonymous_Access (Check_Typ)) - or else (Can_Never_Be_Null (Check_Typ) - and then not Can_Never_Be_Null (Exp_Typ))) - then - Rewrite (Exp, Convert_To (Check_Typ, Relocate_Node (Exp))); - Analyze_And_Resolve (Exp, Check_Typ); - Check_Unset_Reference (Exp); end if; end Aggregate_Constraint_Checks; |