aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada/table.adb
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2019-08-14 09:51:12 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-08-14 09:51:12 +0000
commitebe1a04f30e07c84264da571ac4da003e8c4bc05 (patch)
treedc41e7ed30ca612c7edcd965c84c748bdfda198d /gcc/ada/table.adb
parentd2d56bbae32be728ff82191b6d328e3a8d7c1530 (diff)
downloadgcc-ebe1a04f30e07c84264da571ac4da003e8c4bc05.zip
gcc-ebe1a04f30e07c84264da571ac4da003e8c4bc05.tar.gz
gcc-ebe1a04f30e07c84264da571ac4da003e8c4bc05.tar.bz2
[Ada] Fix discrepancy in mechanism tracking private and full views
This fixes a discrepancy in the mechanism tracking the private and full views of entities when entering and leaving scopes. This mechanism records private entities that are dependent on other private entities, so that the exchange done on entering and leaving scopes can be propagated. The propagation is done recursively on entering child units, but it was not done recursively on leaving them, which would leave the dependency chains in a uncertain state in this case. That's mostly visible when inlining across units is enabled for code involving a lot of generic units. 2019-08-14 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_ch7.adb (Install_Private_Declarations) <Swap_Private_Dependents>: Do not rely solely on the Is_Child_Unit flag on the unit to recurse. (Uninstall_Declarations) <Swap_Private_Dependents>: New function. Use it to recurse on the private dependent entities for child units. gcc/testsuite/ * gnat.dg/inline18.adb, gnat.dg/inline18.ads, gnat.dg/inline18_gen1-inner_g.ads, gnat.dg/inline18_gen1.adb, gnat.dg/inline18_gen1.ads, gnat.dg/inline18_gen2.adb, gnat.dg/inline18_gen2.ads, gnat.dg/inline18_gen3.adb, gnat.dg/inline18_gen3.ads, gnat.dg/inline18_pkg1.adb, gnat.dg/inline18_pkg1.ads, gnat.dg/inline18_pkg2-child.ads, gnat.dg/inline18_pkg2.ads: New testcase. From-SVN: r274451
Diffstat (limited to 'gcc/ada/table.adb')
0 files changed, 0 insertions, 0 deletions