[Ada] Suppress_Initialization not respected for private subtypes

The compiler fails to suppress initialization on a variable of a subtype
of a private type (such as System.Address) even though the subtype has
aspect Suppress_Initialization. This can lead to errors on object
declarations specified with Thread_Local_Storage when Initialize_Scalars
is applied (as well as leading to default initialization when it
shouldn't).

2019-08-12  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* sem_prag.adb (Analyze_Pragma, Pragma_Suppress_Initialization):
	For private types, set the Suppress_Initialization flag on the
	Full_View of the entity rather than the entity's base type.

gcc/testsuite/

	* gnat.dg/suppress_initialization2.adb,
	gnat.dg/suppress_initialization2.ads: New testcase.

From-SVN: r274293
This commit is contained in:
Gary Dismukes 2019-08-12 08:59:58 +00:00 committed by Pierre-Marie de Rodat
parent 9dfc6c5508
commit 651c9c1e4b
5 changed files with 30 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2019-08-12 Gary Dismukes <dismukes@adacore.com>
* sem_prag.adb (Analyze_Pragma, Pragma_Suppress_Initialization):
For private types, set the Suppress_Initialization flag on the
Full_View of the entity rather than the entity's base type.
2019-08-12 Yannick Moy <moy@adacore.com>
* aspects.adb, aspects.ads (Aspect_No_Caching): New aspect.

View File

@ -24169,7 +24169,7 @@ package body Sem_Prag is
Error_Pragma_Arg
("argument of pragma% cannot be an incomplete type", Arg1);
else
Set_Suppress_Initialization (Full_View (Base_Type (E)));
Set_Suppress_Initialization (Full_View (E));
end if;
-- For first subtype, set flag on base type

View File

@ -1,3 +1,8 @@
2019-08-12 Gary Dismukes <dismukes@adacore.com>
* gnat.dg/suppress_initialization2.adb,
gnat.dg/suppress_initialization2.ads: New testcase.
2019-08-12 Yannick Moy <moy@adacore.com>
* gnat.dg/no_caching.adb, gnat.dg/no_caching.ads: New testcase.

View File

@ -0,0 +1,5 @@
package body Suppress_Initialization2 is
procedure Dummy is null;
end Suppress_Initialization2;

View File

@ -0,0 +1,13 @@
pragma Initialize_Scalars;
with System;
package Suppress_Initialization2 is
subtype Sub_Addr is System.Address with Suppress_Initialization;
O : Sub_Addr with Thread_Local_Storage; -- OK: no error should be reported
procedure Dummy;
end Suppress_Initialization2;