Introduce instance discriminators
commit0b2927f031aa8dd54cb0d8fd396634bc01539e83
authoraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jul 2018 21:19:13 +0000 (31 21:19 +0000)
committeraoliva <aoliva@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 31 Jul 2018 21:19:13 +0000 (31 21:19 +0000)
treef227c6802b9656b6bc7d3b3f090e9b9d78f1bb4b
parent98605dea9f97f74e6a5e75308774c117292b184e
Introduce instance discriminators

With -gnateS, the Ada compiler sets itself up to output discriminators
for different instantiations of generics, but the middle and back ends
have lacked support for that.  This patch introduces the missing bits,
translating the GNAT-internal representation of the per-file instance
map to an instance_table that maps decls to instance discriminators.

From: Alexandre Oliva  <oliva@adacore.com>, Olivier Hainque  <hainque@adacore.com>
for  gcc/ChangeLog

* debug.h (decl_to_instance_map_t): New type.
(decl_to_instance_map): Declare.
(maybe_create_decl_to_instance_map): New inline function.
     * final.c (bb_discriminator, last_bb_discriminator): New statics,
     to track basic block discriminators.
     (final_start_function_1): Initialize them.
     (final_scan_insn_1): On NOTE_INSN_BASIC_BLOCK, track
bb_discriminator.
(decl_to_instance_map): New variable.
(map_decl_to_instance, maybe_set_discriminator): New functions.
     (notice_source_line): Set discriminator.

for  gcc/ada/ChangeLog

* trans.c: Include debug.h.
(file_map): New static variable.
(gigi): Set it.  Create decl_to_instance_map when needed.
(Subprogram_Body_to_gnu): Pass gnu_subprog_decl to...
(Sloc_to_locus): ... this.  Add decl parm, map it to instance.
* gigi.h (Sloc_to_locus): Adjust declaration.

for  gcc/testsuite/ChangeLog

* gnat.dg/dinst.adb: New.
* gnat.dg/dinst_pkg.ads, gnat.dg/dinst_pkg.adb: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@263182 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/ada/ChangeLog
gcc/ada/gcc-interface/gigi.h
gcc/ada/gcc-interface/trans.c
gcc/debug.h
gcc/final.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/dinst.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/dinst_pkg.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/dinst_pkg.ads [new file with mode: 0644]