+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
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
+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.
--- /dev/null
+-- { 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;