[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:
parent
9dfc6c5508
commit
651c9c1e4b
@ -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>
|
2019-08-12 Yannick Moy <moy@adacore.com>
|
||||||
|
|
||||||
* aspects.adb, aspects.ads (Aspect_No_Caching): New aspect.
|
* aspects.adb, aspects.ads (Aspect_No_Caching): New aspect.
|
||||||
|
@ -24169,7 +24169,7 @@ package body Sem_Prag is
|
|||||||
Error_Pragma_Arg
|
Error_Pragma_Arg
|
||||||
("argument of pragma% cannot be an incomplete type", Arg1);
|
("argument of pragma% cannot be an incomplete type", Arg1);
|
||||||
else
|
else
|
||||||
Set_Suppress_Initialization (Full_View (Base_Type (E)));
|
Set_Suppress_Initialization (Full_View (E));
|
||||||
end if;
|
end if;
|
||||||
|
|
||||||
-- For first subtype, set flag on base type
|
-- For first subtype, set flag on base type
|
||||||
|
@ -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>
|
2019-08-12 Yannick Moy <moy@adacore.com>
|
||||||
|
|
||||||
* gnat.dg/no_caching.adb, gnat.dg/no_caching.ads: New testcase.
|
* gnat.dg/no_caching.adb, gnat.dg/no_caching.ads: New testcase.
|
||||||
|
5
gcc/testsuite/gnat.dg/suppress_initialization2.adb
Normal file
5
gcc/testsuite/gnat.dg/suppress_initialization2.adb
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package body Suppress_Initialization2 is
|
||||||
|
|
||||||
|
procedure Dummy is null;
|
||||||
|
|
||||||
|
end Suppress_Initialization2;
|
13
gcc/testsuite/gnat.dg/suppress_initialization2.ads
Normal file
13
gcc/testsuite/gnat.dg/suppress_initialization2.ads
Normal 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;
|
Loading…
Reference in New Issue
Block a user