diff options
author | Robert Dewar <dewar@adacore.com> | 2007-08-16 14:20:32 +0200 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2007-08-16 14:20:32 +0200 |
commit | 3b8b72709570294dbf39a767446abe0bdf17c40f (patch) | |
tree | c6e23196fb0dab9c3d4e73d751df4d212ed98e21 /gcc | |
parent | c6fe3827dfa59a94a270eacfac1fedfb824a3d1a (diff) | |
download | gcc-3b8b72709570294dbf39a767446abe0bdf17c40f.zip gcc-3b8b72709570294dbf39a767446abe0bdf17c40f.tar.gz gcc-3b8b72709570294dbf39a767446abe0bdf17c40f.tar.bz2 |
sem_ch5.adb (Analyze_Assignment): Make sure we still note update in exception case
2007-08-16 Robert Dewar <dewar@adacore.com>
* sem_ch5.adb (Analyze_Assignment): Make sure we still note update in
exception case
From-SVN: r127548
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/sem_ch5.adb | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/gcc/ada/sem_ch5.adb b/gcc/ada/sem_ch5.adb index abc3d82..9282b3f 100644 --- a/gcc/ada/sem_ch5.adb +++ b/gcc/ada/sem_ch5.adb @@ -574,22 +574,31 @@ package body Sem_Ch5 is Analyze_And_Resolve (Rhs, T1); end if; - -- Ada 2005 (AI-231) + -- Ada 2005 (AI-231): Assignment to not null variable if Ada_Version >= Ada_05 and then Can_Never_Be_Null (T1) and then not Assignment_OK (Lhs) then + -- Case where we know the right hand side is null + if Known_Null (Rhs) then Apply_Compile_Time_Constraint_Error (N => Rhs, Msg => "(Ada 2005) null not allowed in null-excluding objects?", Reason => CE_Null_Not_Allowed); + + -- We still mark this as a possible modification, that's necessary + -- to reset Is_True_Constant, and desirable for xref purposes. + + Note_Possible_Modification (Lhs); return; + -- If we know the right hand side is non-null, then we convert to the + -- target type, since we don't need a run time check in that case. + elsif not Can_Never_Be_Null (T2) then - Rewrite (Rhs, - Convert_To (T1, Relocate_Node (Rhs))); + Rewrite (Rhs, Convert_To (T1, Relocate_Node (Rhs))); Analyze_And_Resolve (Rhs, T1); end if; end if; |