[Ada] Bad Default_Initial_Condition check for a not-default-initialized object

Message ID 20220905072610.GA1174775@poulhies-Precision-5550
State New, archived
Headers
Series [Ada] Bad Default_Initial_Condition check for a not-default-initialized object |

Commit Message

Marc Poulhiès Sept. 5, 2022, 7:26 a.m. UTC
  No Default_Initial_Condition check should be generated for an object
declaration that has an explicit initial value. Previously this was
implemented by testing the Has_Init_Expression flag, but this only works
if the object declaration was created by the parser (since only the
parser sets that attribute, at least currently).

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* exp_ch3.adb
	(Expand_N_Object_Declaration): In deciding whether to emit a DIC
	check, we were previously testing the Has_Init_Expression flag.
	Continue to test that flag as before, but add a test for the
	syntactic presence of an initial value in the object declaration.
	This new test would not supersede the old test in the case where
	an explicit initial value has been eliminated as part of some tree
	transformation.
  

Patch

diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb
--- a/gcc/ada/exp_ch3.adb
+++ b/gcc/ada/exp_ch3.adb
@@ -7850,6 +7850,7 @@  package body Exp_Ch3 is
         and then Present (DIC_Procedure (Typ))
         and then not Has_Null_Body (DIC_Procedure (Typ))
         and then not Has_Init_Expression (N)
+        and then No (Expr)
         and then not Is_Imported (Def_Id)
       then
          declare