diff options
author | Ed Schonberg <schonberg@adacore.com> | 2019-07-22 13:57:51 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-07-22 13:57:51 +0000 |
commit | 8c029ee8cf5d14e8c0dc0a74d9a5278c3aee49e9 (patch) | |
tree | be97ea27ba1cc2459f91ff6d462cf35ca3ce0519 | |
parent | 22862ba6d688c95d9f9577746d212183a11c44da (diff) | |
download | gcc-8c029ee8cf5d14e8c0dc0a74d9a5278c3aee49e9.zip gcc-8c029ee8cf5d14e8c0dc0a74d9a5278c3aee49e9.tar.gz gcc-8c029ee8cf5d14e8c0dc0a74d9a5278c3aee49e9.tar.bz2 |
[Ada] Misleading warning on variable not assigned
This patch removes a warning on a referenced entity with no explicit
prior assignment, if the type of the entity has
Preelaborable_Initialixation, such as Exception_Occurrence.
2019-07-22 Ed Schonberg <schonberg@adacore.com>
gcc/ada/
* sem_warn.adb (Check_References): Do not emit s warning on a
referenced entity with no explicit assignment if the type of the
entity has Preelaborable_Initialixation, such as
Exception_Occurrence.
gcc/testsuite/
* gnat.dg/warn25.adb: New testcase.
From-SVN: r273686
-rw-r--r-- | gcc/ada/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/ada/sem_warn.adb | 8 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gnat.dg/warn25.adb | 23 |
4 files changed, 40 insertions, 2 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index ac990be..12ea5ad 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,10 @@ +2019-07-22 Ed Schonberg <schonberg@adacore.com> + + * sem_warn.adb (Check_References): Do not emit s warning on a + referenced entity with no explicit assignment if the type of the + entity has Preelaborable_Initialixation, such as + Exception_Occurrence. + 2019-07-22 Javier Miranda <miranda@adacore.com> * exp_ch4.adb (Size_In_Storage_Elements): Improve the expansion diff --git a/gcc/ada/sem_warn.adb b/gcc/ada/sem_warn.adb index 0e1e292..ab85162 100644 --- a/gcc/ada/sem_warn.adb +++ b/gcc/ada/sem_warn.adb @@ -1413,9 +1413,13 @@ package body Sem_Warn is goto Continue; end if; - -- Check for unset reference + -- Check for unset reference. If type of object has + -- preelaborable initialization, warning is misleading. - if Warn_On_No_Value_Assigned and then Present (UR) then + if Warn_On_No_Value_Assigned + and then Present (UR) + and then not Known_To_Have_Preelab_Init (Etype (E1)) + then -- For other than access type, go back to original node to -- deal with case where original unset reference has been diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 079f6e9..c9679c7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-07-22 Ed Schonberg <schonberg@adacore.com> + + * gnat.dg/warn25.adb: New testcase. + 2019-07-22 Yannick Moy <moy@adacore.com> * gnat.dg/warn24.adb: New testcase. diff --git a/gcc/testsuite/gnat.dg/warn25.adb b/gcc/testsuite/gnat.dg/warn25.adb new file mode 100644 index 0000000..e784870 --- /dev/null +++ b/gcc/testsuite/gnat.dg/warn25.adb @@ -0,0 +1,23 @@ +-- { dg-do compile } +-- { dg-options "-gnatwa" } + +with Ada.Exceptions; +procedure Warn25 is + CASA_Unavailable : Ada.Exceptions.Exception_Occurrence; + use Ada.Exceptions; +begin + while True loop + declare + begin + if Exception_Identity (CASA_Unavailable) = Null_Id then + exit; + end if; + exception + when E : others => + Save_Occurrence (Source => E, Target => CASA_Unavailable); + end; + end loop; + if Exception_Identity (CASA_Unavailable) /= Null_Id then + Reraise_Occurrence (CASA_Unavailable); + end if; +end; |