From: Gary Dismukes Date: Thu, 11 Jan 2018 08:56:18 +0000 (+0000) Subject: [Ada] Warning on out-of-range value for default-initialized scalar object X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=fab588529a9605df33ca25a97f5b0e7c56f6c3be;p=gcc.git [Ada] Warning on out-of-range value for default-initialized scalar object When an object of a type with a specified Default_Value aspect is declared without an explicit initial value and the default value is out of range of the objects subtype, the compiler now issues a warning that Constraint_Error will be raised due to an out-of-range value. The test below must output a compiler warning as follows: $ gcc -c -gnatj70 default_warning.adb default_warning.adb:7:08: warning: value not in range of type "Subint" defined at line 5, "Constraint_Error" will be raised at run time procedure Default_Warning is type Int_With_Default is new Integer with Default_Value => 0; subtype Subint is Int_With_Default range 1 .. 100; S : Subint; begin null; end Default_Warning; 2018-01-11 Gary Dismukes gcc/ada/ * exp_ch3.adb (Default_Initialize_Object): Call New_Copy_Tree on the result of Get_Simple_Init_Value and pass the source location of the object declaration's object_definition. From-SVN: r256524 --- diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 63c2a9500a5..aa69c9216fc 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2018-01-11 Gary Dismukes + + * exp_ch3.adb (Default_Initialize_Object): Call New_Copy_Tree on the + result of Get_Simple_Init_Value and pass the source location of the + object declaration's object_definition. + 2018-01-11 Ed Schonberg * exp_ch6.adb (Make_Build_In_Place_Call_In_Object_Declaration): Handle diff --git a/gcc/ada/exp_ch3.adb b/gcc/ada/exp_ch3.adb index 53f71afa1ab..89ff6581ede 100644 --- a/gcc/ada/exp_ch3.adb +++ b/gcc/ada/exp_ch3.adb @@ -6052,7 +6052,10 @@ package body Exp_Ch3 is and then not Has_Init_Expression (N) then Set_No_Initialization (N, False); - Set_Expression (N, Get_Simple_Init_Val (Typ, N, Esize (Def_Id))); + Set_Expression + (N, New_Copy_Tree + (Get_Simple_Init_Val (Typ, N, Esize (Def_Id)), + New_Sloc => Sloc (Obj_Def))); Analyze_And_Resolve (Expression (N), Typ); end if;