Commit 8c029ee8 by Ed Schonberg Committed by Pierre-Marie de Rodat

[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
parent 22862ba6
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
......
......@@ -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
......
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.
......
-- { 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment