Commit 651c9c1e by Gary Dismukes Committed by Pierre-Marie de Rodat

[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
parent 9dfc6c55
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.
......
......@@ -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
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.
......
package body Suppress_Initialization2 is
procedure Dummy is null;
end Suppress_Initialization2;
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;
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