diff options
author | Robert Dewar <dewar@adacore.com> | 2014-01-24 14:03:19 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2014-01-24 15:03:19 +0100 |
commit | a6ae518ff7855e89b8b1e578e2124fd0a79f3f84 (patch) | |
tree | 685f0bcb0d999d01912bd38b8e8d58ae51aed015 /gcc | |
parent | 0bd38d942cf03bc447d09bce4045369eccfa9431 (diff) | |
download | gcc-a6ae518ff7855e89b8b1e578e2124fd0a79f3f84.zip gcc-a6ae518ff7855e89b8b1e578e2124fd0a79f3f84.tar.gz gcc-a6ae518ff7855e89b8b1e578e2124fd0a79f3f84.tar.bz2 |
sem_util.adb, [...]: Correct false positive warnings.
2014-01-24 Robert Dewar <dewar@adacore.com>
* sem_util.adb, lib-xref.adb: Correct false positive warnings.
From-SVN: r207031
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/ada/lib-xref.adb | 30 | ||||
-rw-r--r-- | gcc/ada/sem_util.adb | 7 |
3 files changed, 29 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index a21fe7c..cabedee 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,7 @@ +2014-01-24 Robert Dewar <dewar@adacore.com> + + * sem_util.adb, lib-xref.adb: Correct false positive warnings. + 2014-01-24 Vincent Celier <celier@adacore.com> * projects.texi: Document that aggregate projects are only diff --git a/gcc/ada/lib-xref.adb b/gcc/ada/lib-xref.adb index a01bbab..6773921 100644 --- a/gcc/ada/lib-xref.adb +++ b/gcc/ada/lib-xref.adb @@ -432,6 +432,7 @@ package body Lib.Xref is -- ??? There are several routines here and there that perform a similar -- (but subtly different) computation, which should be factored: + -- Sem_Util.Is_LHS -- Sem_Util.May_Be_Lvalue -- Sem_Util.Known_To_Be_Assigned -- Exp_Ch2.Expand_Entry_Parameter.In_Assignment_Context @@ -473,20 +474,27 @@ package body Lib.Xref is -- ??? case of a slice assignment? - -- ??? Note that in some cases this is called too early - -- (see comments in Sem_Ch8.Find_Direct_Name), at a point where - -- the tree is not fully typed yet. In that case we may lack - -- an Etype for N, and we must disable the check for an implicit - -- dereference. If the dereference is on an LHS, this causes a - -- false positive. - elsif (K = N_Selected_Component or else K = N_Indexed_Component) and then Prefix (P) = N - and then not (Present (Etype (N)) - and then - Is_Access_Type (Etype (N))) then - N := P; + -- Check for access type. First a kludge, In some cases this is + -- called too early (see comments in Sem_Ch8.Find_Direct_Name), + -- at a point where the tree is not fully typed yet. In that + -- case we may lack an Etype for N, and we can't check the + -- Etype. For now, we always return False in such a case, + -- but this is clearly not right in all cases ??? + + if No (Etype (N)) then + return False; + + elsif Is_Access_Type (Etype (N)) then + return False; + + -- Access type case dealt with, keep going + + else + N := P; + end if; -- All other cases, definitely not on left side diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb index b5bb307..422e462 100644 --- a/gcc/ada/sem_util.adb +++ b/gcc/ada/sem_util.adb @@ -9882,7 +9882,12 @@ package body Sem_Util is -- a reference as a modification. It is not clear if there are any -- other bad consequences. ??? - if Present (Etype (N)) and then Is_Access_Type (Etype (N)) then + if No (Etype (N)) then + return False; + + -- We have an Etype set, so we can check it + + elsif Is_Access_Type (Etype (N)) then return False; -- OK, not access type case, so just test whole expression |