]> gcc.gnu.org Git - gcc.git/commit - gcc/ada/gcc-interface/trans.cc
[Ada] Variable-sized node types
authorBob Duff <duff@adacore.com>
Wed, 3 Feb 2021 10:31:16 +0000 (05:31 -0500)
committerPierre-Marie de Rodat <derodat@adacore.com>
Fri, 7 May 2021 09:29:09 +0000 (05:29 -0400)
commit76f9c7f44fffb0b03266730b137313fe79f1c99e
tree8c77fa6bd5661f0ffb427f7003a21b9a46dc30d6
parent476ed6bf66ab20e22ae4b3da0fd7fd94753f2334
[Ada] Variable-sized node types

gcc/ada/

* atree.ads, atree.adb: Major rewrite to support variable-sized
node types. Add pragmas Suppress and Assertion_Policy.  We now
have an extra level of indirection: Node_Offsets is a table
mapping Node_Ids to the offset of the start of each node in
Slots. Slots is a table containing one or more contiguous slots
for each node. Each slot is a 32-bit unchecked union that can
contain any mixture of 1, 2, 4, 8, and 32-bit fields that fits.
The old low-level getters and setters (e.g.  Flag123) are
removed.
* gen_il-fields.ads, gen_il-gen-gen_entities.adb,
gen_il-gen-gen_nodes.adb, gen_il-gen.adb, gen_il-gen.ads,
gen_il-main.adb, gen_il-types.ads, gen_il-utils.adb,
gen_il-utils.ads, gen_il.adb, gen_il.ads: New gen_il program
that generates various Ada and C++ files. In particular, the
following files are generated by gen_il: einfo-entities.adb
einfo-entities.ads, gnatvsn.ads, nmake.adb, nmake.ads,
seinfo.ads, seinfo_tables.adb, seinfo_tables.ads,
sinfo-nodes.adb, sinfo-nodes.ads, einfo.h, and sinfo.h.
* sinfo-utils.adb, sinfo-utils.ads, einfo-utils.adb,
einfo-utils.ads: New files containing code that needs to refer
to Sinfo.Nodes and Einfo.Entities. This code is mostly moved
here from Sinfo and Einfo to break cycles.
* back_end.adb: Pass node_offsets_ptr and slots_ptr to gigi,
instead of nodes_ptr and flags_ptr. The Nodes and Flags tables
no longer exist. (Note that gigi never used the Flags table.)
* sinfo-cn.ads (Change_Identifier_To_Defining_Identifier,
Change_Character_Literal_To_Defining_Character_Literal,
Change_Operator_Symbol_To_Defining_Operator_Symbol): Turn N into
an IN formal.
* sinfo-cn.adb: Update.  Add assertions, which can be removed at
some point.  Rewrite to use higher-level facilities.  Make sure
vanishing fields are zeroed out.  Add with/use for new packages.
* sem_util.adb: Remove "Assert(False)" immediately followed by
"raise Program_Error".  Use higher-level facilities such as
Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
routines that no longer exist. Use Get_Comes_From_Source_Default
instead of Default_Node.Comes_From_Source (Default_Node no
longer exists).  Use Set_Basic_Convention instead of
Basic_Set_Convention.  Add with/use for new packages.
* sem_util.ads: The Convention field had getter Convention and
setter Basic_Set_Convention. Make that more uniform: there is
now a field called Basic_Convention, with Basic_Convention and
Set_Basic_Convention as getter/setter, and write Convention and
Set_Convention here.
* nlists.adb: Rewrite to use abstractions, rather then depending
on low-level implementation details of Atree. Necessary because
those details have changed. Add with/use for new packages.
* sem_ch12.adb: Use higher-level facilities such as
Walk_Sinfo_Fields instead of depending on low-level Set_FieldN
routines that no longer exist. Add with/use for new packages.
* exp_cg.adb, sem_ch10.adb, sem_ch4.adb, sem_eval.adb,
sem_prag.adb, sem_warn.adb: Change expanded names to refer to
the new packages for things that moved. Add with/use for new
packages.
* sem_ch3.adb: Likewise. Reinitialize vanishing fields.
* exp_disp.adb: Likewise. Remove failing assertion.
* sinfo.ads, einfo.ads: Remove code that is now generated into
Sinfo.Nodes and Einfo.Entities.
* sinfo.adb, einfo.adb: Replace bodies with "pragma No_Body;".
We should delete these at some point, but No_Body makes make
files easier. Some code is moved to Sinfo.Nodes, Einfo.Entities,
Sinfo.Utils, and Einfo.Utils. Some is no longer necessary.
* treepr.adb: Rewrite to use new tables. We no longer need
treeprs.ads.
* treepr.ads: Add comment.
* types.ads: Move types Component_Alignment_Kind and
Float_Rep_Kind here.
* atree.h: Major update to match atree.ads changes.  Add slot
types, for use by getters/setters.
* types.h: Move types Component_Alignment_Kind and
Float_Rep_Kind here.
* fe.h: Rewrite to deal with code that has changed or moved from
Atree, Sinfo, Einfo.
* nlists.h: Move some code to fe.h.
* alloc.ads: Split Nodes_* constants into Node_Offsets and
Slots, because Atree has two separate tables.  Increase values.
Remove Nodes_Release_Threshold. Improve comment.
* debug.adb, gnat1drv.adb: Remove obsolete gnatd.A and gnatd.N
switches.  Add with/use for new packages.
* opt.ads: Minor comment fix.
* aspects.adb, checks.adb, comperr.adb, contracts.adb,
cstand.adb, debug_a.adb, errout.adb, eval_fat.adb, exp_aggr.adb,
exp_atag.adb, exp_attr.adb, exp_ch11.adb, exp_ch12.adb,
exp_ch13.adb, exp_ch2.adb, exp_ch3.adb, exp_ch4.adb,
exp_ch5.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_ch9.adb,
exp_code.adb, exp_dbug.adb, exp_dist.adb, exp_fixd.adb,
exp_imgv.adb, exp_intr.adb, exp_pakd.adb, exp_prag.adb,
exp_put_image.adb, exp_sel.adb, exp_smem.adb, exp_spark.adb,
exp_strm.adb, exp_tss.adb, exp_unst.adb, exp_util.adb,
exp_util.ads, expander.adb, freeze.adb, frontend.adb,
get_targ.ads, ghost.adb, gnat_cuda.adb, impunit.adb, inline.adb,
itypes.adb, itypes.ads, layout.adb, lib.adb, lib-load.adb,
lib-writ.adb, lib-xref.adb, lib-xref.ads,
lib-xref-spark_specific.adb, live.adb, par.adb, par_sco.adb,
pprint.adb, repinfo.adb, restrict.adb, rtsfind.adb, scil_ll.adb,
scn.adb, sem.adb, sem.ads, sem_aggr.adb, sem_attr.adb,
sem_aux.adb, sem_case.adb, sem_cat.adb, sem_ch11.adb,
sem_ch13.adb, sem_ch2.adb, sem_ch5.adb, sem_ch6.adb,
sem_ch7.adb, sem_ch8.adb, sem_ch9.adb, sem_dim.adb,
sem_disp.adb, sem_dist.adb, sem_elab.adb, sem_elim.adb,
sem_intr.adb, sem_mech.adb, sem_res.adb, sem_scil.adb,
sem_smem.adb, sem_type.adb, set_targ.ads, sinput.adb,
sinput-l.adb, sprint.adb, style.adb, styleg.adb, tbuild.adb,
tbuild.ads, uname.adb: Add with/use for new packages.
* libgnat/a-stoubu.adb, libgnat/a-stouut.adb: Simplify to ease
bootstrap.
* libgnat/a-stobfi.adb, libgnat/a-stoufi.adb (Create_File,
Create_New_File): Create file in binary format, to avoid
introducing unwanted text conversions on Windows. Simplify to
ease bootstrap.
* libgnat/a-stteou__bootstrap.ads: New.
* ceinfo.adb, csinfo.adb, nmake.adt, treeprs.adt, xeinfo.adb,
xnmake.adb, xsinfo.adb, xtreeprs.adb: Delete.
* Make-generated.in: Build and run the gen_il program to
generate files. The files are generated in the ada/gen_il
subdirectory, and then moved up to ada.  We rely on gnatmake (as
opposed to make) to build the gen_il program efficiently (i.e.
don't do anything if the sources didn't change).
* gcc-interface/Makefile.in (ADAFLAGS): Add -gnatU.
(GNATMAKE_OBJS): Add new object files.
(GENERATED_FILES_FOR_TOOLS): New variable.
(../stamp-tools): Create a link for all
GENERATED_FILES_FOR_TOOLS.
* gcc-interface/Make-lang.in (GNAT_ADA_OBJS): Add new object
files.  Remove ada/treeprs.o.
(GNATBIND_OBJS): Add new object files.
(ada.mostlyclean): Remove ada/sdefault.adb and add
ada/stamp-gen_il.
(ada.maintainer-clean): Remove ada/treeprs.ads.
(update-sources): Remove obsolete target.
(ada_generated_files): Rename to...
(ADA_GENERATED_FILES): ... this.  Add new source files.  Add
comment.

* gcc-interface/trans.c: Remove obsolete Nodes_Ptr and
Flags_ptr.  Add Node_Offsets_Ptr and Slots_Ptr, which point to
the corresponding tables in Atree.
* gcc-interface/gigi.h (gigi): New parameters for initializing
Node_Offsets_Ptr and Slots_Ptr.
* gcc-interface/decl.c: Numeric_Kind,
Discrete_Or_Fixed_Point_Kind, and Record_Kind were
nonhierarchical, and were therefore removed for simplicity.
Replace uses with calls to Is_In_... functions.

gnattools/

* Makefile.in (GENERATED_FILES_FOR_TOOLS): New variable.
($(GCC_DIR)/stamp-tools): Walk it for the first copy operation.
167 files changed:
gcc/ada/Make-generated.in
gcc/ada/alloc.ads
gcc/ada/aspects.adb
gcc/ada/atree.adb
gcc/ada/atree.ads
gcc/ada/atree.h
gcc/ada/back_end.adb
gcc/ada/ceinfo.adb [deleted file]
gcc/ada/checks.adb
gcc/ada/comperr.adb
gcc/ada/contracts.adb
gcc/ada/csinfo.adb [deleted file]
gcc/ada/cstand.adb
gcc/ada/debug.adb
gcc/ada/debug_a.adb
gcc/ada/einfo-utils.adb [new file with mode: 0644]
gcc/ada/einfo-utils.ads [new file with mode: 0644]
gcc/ada/einfo.adb
gcc/ada/einfo.ads
gcc/ada/errout.adb
gcc/ada/eval_fat.adb
gcc/ada/exp_aggr.adb
gcc/ada/exp_atag.adb
gcc/ada/exp_attr.adb
gcc/ada/exp_cg.adb
gcc/ada/exp_ch11.adb
gcc/ada/exp_ch12.adb
gcc/ada/exp_ch13.adb
gcc/ada/exp_ch2.adb
gcc/ada/exp_ch3.adb
gcc/ada/exp_ch4.adb
gcc/ada/exp_ch5.adb
gcc/ada/exp_ch6.adb
gcc/ada/exp_ch7.adb
gcc/ada/exp_ch8.adb
gcc/ada/exp_ch9.adb
gcc/ada/exp_code.adb
gcc/ada/exp_dbug.adb
gcc/ada/exp_disp.adb
gcc/ada/exp_dist.adb
gcc/ada/exp_fixd.adb
gcc/ada/exp_imgv.adb
gcc/ada/exp_intr.adb
gcc/ada/exp_pakd.adb
gcc/ada/exp_prag.adb
gcc/ada/exp_put_image.adb
gcc/ada/exp_sel.adb
gcc/ada/exp_smem.adb
gcc/ada/exp_spark.adb
gcc/ada/exp_strm.adb
gcc/ada/exp_tss.adb
gcc/ada/exp_unst.adb
gcc/ada/exp_util.adb
gcc/ada/exp_util.ads
gcc/ada/expander.adb
gcc/ada/fe.h
gcc/ada/freeze.adb
gcc/ada/frontend.adb
gcc/ada/gcc-interface/Make-lang.in
gcc/ada/gcc-interface/Makefile.in
gcc/ada/gcc-interface/decl.c
gcc/ada/gcc-interface/gigi.h
gcc/ada/gcc-interface/trans.c
gcc/ada/gen_il-fields.ads [new file with mode: 0644]
gcc/ada/gen_il-gen-gen_entities.adb [new file with mode: 0644]
gcc/ada/gen_il-gen-gen_nodes.adb [new file with mode: 0644]
gcc/ada/gen_il-gen.adb [new file with mode: 0644]
gcc/ada/gen_il-gen.ads [new file with mode: 0644]
gcc/ada/gen_il-main.adb [new file with mode: 0644]
gcc/ada/gen_il-types.ads [new file with mode: 0644]
gcc/ada/gen_il-utils.adb [new file with mode: 0644]
gcc/ada/gen_il-utils.ads [new file with mode: 0644]
gcc/ada/gen_il.adb [new file with mode: 0644]
gcc/ada/gen_il.ads [new file with mode: 0644]
gcc/ada/get_targ.ads
gcc/ada/ghost.adb
gcc/ada/gnat1drv.adb
gcc/ada/gnat_cuda.adb
gcc/ada/impunit.adb
gcc/ada/inline.adb
gcc/ada/itypes.adb
gcc/ada/itypes.ads
gcc/ada/layout.adb
gcc/ada/lib-load.adb
gcc/ada/lib-writ.adb
gcc/ada/lib-xref-spark_specific.adb
gcc/ada/lib-xref.adb
gcc/ada/lib-xref.ads
gcc/ada/lib.adb
gcc/ada/libgnat/a-stobfi.adb
gcc/ada/libgnat/a-stoubu.adb
gcc/ada/libgnat/a-stoufi.adb
gcc/ada/libgnat/a-stouut.adb
gcc/ada/libgnat/a-stteou__bootstrap.ads [new file with mode: 0644]
gcc/ada/live.adb
gcc/ada/nlists.adb
gcc/ada/nlists.h
gcc/ada/nmake.adt [deleted file]
gcc/ada/opt.ads
gcc/ada/par.adb
gcc/ada/par_sco.adb
gcc/ada/pprint.adb
gcc/ada/repinfo.adb
gcc/ada/restrict.adb
gcc/ada/rtsfind.adb
gcc/ada/scil_ll.adb
gcc/ada/scn.adb
gcc/ada/sem.adb
gcc/ada/sem.ads
gcc/ada/sem_aggr.adb
gcc/ada/sem_attr.adb
gcc/ada/sem_aux.adb
gcc/ada/sem_case.adb
gcc/ada/sem_cat.adb
gcc/ada/sem_ch10.adb
gcc/ada/sem_ch11.adb
gcc/ada/sem_ch12.adb
gcc/ada/sem_ch13.adb
gcc/ada/sem_ch2.adb
gcc/ada/sem_ch3.adb
gcc/ada/sem_ch4.adb
gcc/ada/sem_ch5.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_ch7.adb
gcc/ada/sem_ch8.adb
gcc/ada/sem_ch9.adb
gcc/ada/sem_dim.adb
gcc/ada/sem_disp.adb
gcc/ada/sem_dist.adb
gcc/ada/sem_elab.adb
gcc/ada/sem_elim.adb
gcc/ada/sem_eval.adb
gcc/ada/sem_intr.adb
gcc/ada/sem_mech.adb
gcc/ada/sem_prag.adb
gcc/ada/sem_res.adb
gcc/ada/sem_scil.adb
gcc/ada/sem_smem.adb
gcc/ada/sem_type.adb
gcc/ada/sem_util.adb
gcc/ada/sem_util.ads
gcc/ada/sem_warn.adb
gcc/ada/set_targ.ads
gcc/ada/sinfo-cn.adb
gcc/ada/sinfo-cn.ads
gcc/ada/sinfo-utils.adb [new file with mode: 0644]
gcc/ada/sinfo-utils.ads [new file with mode: 0644]
gcc/ada/sinfo.adb
gcc/ada/sinfo.ads
gcc/ada/sinput-l.adb
gcc/ada/sinput.adb
gcc/ada/sprint.adb
gcc/ada/style.adb
gcc/ada/styleg.adb
gcc/ada/tbuild.adb
gcc/ada/tbuild.ads
gcc/ada/treepr.adb
gcc/ada/treepr.ads
gcc/ada/treeprs.adt [deleted file]
gcc/ada/types.ads
gcc/ada/types.h
gcc/ada/uname.adb
gcc/ada/xeinfo.adb [deleted file]
gcc/ada/xnmake.adb [deleted file]
gcc/ada/xsinfo.adb [deleted file]
gcc/ada/xtreeprs.adb [deleted file]
gnattools/Makefile.in
This page took 0.101455 seconds and 5 git commands to generate.