aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Schonberg <schonberg@adacore.com>2019-07-22 13:57:51 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-07-22 13:57:51 +0000
commit8c029ee8cf5d14e8c0dc0a74d9a5278c3aee49e9 (patch)
treebe97ea27ba1cc2459f91ff6d462cf35ca3ce0519
parent22862ba6d688c95d9f9577746d212183a11c44da (diff)
downloadgcc-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/ChangeLog7
-rw-r--r--gcc/ada/sem_warn.adb8
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/warn25.adb23
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;