decl.c (prepend_attributes): New case.
authorEric Botcazou <ebotcazou@adacore.com>
Mon, 4 Jul 2005 13:27:21 +0000 (15:27 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Mon, 4 Jul 2005 13:27:21 +0000 (15:27 +0200)
commitd9e0a58787285a0753791dd83a5d831bbbc92117
tree617e7a72024f1df19ef1395e2e890a2461922a3f
parentc73ae90f23fab6c872b09e02b0d1e34727883056
decl.c (prepend_attributes): New case.

2005-07-04  Eric Botcazou  <ebotcazou@adacore.com>

* decl.c (prepend_attributes) <Pragma_Linker_Constructor>: New case.
<Pragma_Linker_Destructor>: Likewise.

* einfo.ads (Has_Gigi_Rep_Item): Document Pragma_Linker_Constructor and
Pragma_Linker_Destructor.

* gigi.h (attr_type): Add ATTR_LINK_CONSTRUCTOR and
ATTR_LINK_DESTRUCTOR.
(static_ctors, static_dtors): New variables.

* misc.c (gnat_expand_body): Output current function as constructor
and destructor if requested.

* par-prag.adb: Add processing for pragma Linker_Constructor and
Linker_Destructor.

* sem_prag.adb (Find_Unique_Parameterless_Procedure): New function
extracted from Check_Interrupt_Or_Attach_Handler.
(Check_Interrupt_Or_Attach_Handler): Invoke it.
Implement pragma Linker_Constructor and Linker_Destructor with the
help of Find_Unique_Parameterless_Procedure.
Replace Name_Alias with Name_Target for pragma Linker_Alias.

* snames.h, snames.ads, snames.adb:
Add Name_Linker_Constructor and Name_Linker_Destructor.
Add Pragma_Linker_Constructor and Pragma_Linker_Destructor.
* snames.adb: Remove Name_Alias.

* trans.c: Include cgraph.h.
(build_global_cdtor): New function.
(Compilation_Unit_to_gnu): Build global constructor and destructor if
needed.
(tree_transform) <N_Identifier>: Substitute renaming of view-conversions
of objects too.
(addressable_p) <COMPONENT_REF>: Unconditionally test
DECL_NONADDRESSABLE_P on STRICT_ALIGNMENT platforms.

* utils.c (process_attributes) <ATTR_LINK_ALIAS>: Do not assemble the
variable if it is external.

(static_ctors, static_dtors): New global variables.
(process_attributes) <ATTR_LINK_CONSTRUCTOR>: New case.
<ATTR_LINK_DESTRUCTOR>: Likewise.
(end_subprog_body): Chain function as constructor and destructor
if requested.

* exp_util.adb (Force_Evaluation): Unconditionally invoke
Remove_Side_Effects with Variable_Ref set to true.
(Remove_Side_Effects): Handle scalar types first. Use a renaming
for non-scalar types even if Variable_Ref is true and for class-wide
expressions.

From-SVN: r101576
12 files changed:
gcc/ada/decl.c
gcc/ada/einfo.ads
gcc/ada/exp_util.adb
gcc/ada/gigi.h
gcc/ada/misc.c
gcc/ada/par-prag.adb
gcc/ada/sem_prag.adb
gcc/ada/snames.adb
gcc/ada/snames.ads
gcc/ada/snames.h
gcc/ada/trans.c
gcc/ada/utils.c