mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:50:50 +08:00
[Ada] Suppress Initialize_Scalars for Persistent_BSS
If a variable has pragma Persistent_BSS, the compiler now automatically suppresses implicit initializations caused by Initialize_Scalars and Normalize_Scalars. Variables with Persistent_BSS cannot be initialized, and previously a pragma Suppress_Initialization was required before the pragma Persistent_BSS. 2019-08-20 Bob Duff <duff@adacore.com> gcc/ada/ * sem_prag.adb (Persistent_BSS): If an initialization is present because of Initialize_Scalars or Normalize_Scalars, generate an implicit pragma Suppress_Initialization to remove that, because initialization is not allowed for these variables. Other initializations remain illegal. From-SVN: r274732
This commit is contained in:
parent
e0ea5d16a8
commit
9740c24464
@ -1,3 +1,11 @@
|
||||
2019-08-20 Bob Duff <duff@adacore.com>
|
||||
|
||||
* sem_prag.adb (Persistent_BSS): If an initialization is present
|
||||
because of Initialize_Scalars or Normalize_Scalars, generate an
|
||||
implicit pragma Suppress_Initialization to remove that, because
|
||||
initialization is not allowed for these variables. Other
|
||||
initializations remain illegal.
|
||||
|
||||
2019-08-20 Gary Dismukes <dismukes@adacore.com>
|
||||
|
||||
* sem_ch3.adb (OK_For_Limited_Init_In_05): In the case of type
|
||||
|
@ -21092,8 +21092,24 @@ package body Sem_Prag is
|
||||
Decl := Parent (Ent);
|
||||
|
||||
if Present (Expression (Decl)) then
|
||||
Error_Pragma_Arg
|
||||
("object for pragma% cannot have initialization", Arg1);
|
||||
-- Variables in Persistent_BSS cannot be initialized, so
|
||||
-- turn off any initialization that might be caused by
|
||||
-- pragmas Initialize_Scalars or Normalize_Scalars.
|
||||
|
||||
if Kill_Range_Check (Expression (Decl)) then
|
||||
Prag :=
|
||||
Make_Pragma (Loc,
|
||||
Name_Suppress_Initialization,
|
||||
Pragma_Argument_Associations => New_List (
|
||||
Make_Pragma_Argument_Association (Loc,
|
||||
Expression => New_Occurrence_Of (Ent, Loc))));
|
||||
Insert_Before (N, Prag);
|
||||
Analyze (Prag);
|
||||
|
||||
else
|
||||
Error_Pragma_Arg
|
||||
("object for pragma% cannot have initialization", Arg1);
|
||||
end if;
|
||||
end if;
|
||||
|
||||
if not Is_Potentially_Persistent_Type (Etype (Ent)) then
|
||||
@ -21104,7 +21120,7 @@ package body Sem_Prag is
|
||||
|
||||
Prag :=
|
||||
Make_Linker_Section_Pragma
|
||||
(Ent, Sloc (N), ".persistent.bss");
|
||||
(Ent, Loc, ".persistent.bss");
|
||||
Insert_After (N, Prag);
|
||||
Analyze (Prag);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user