[Ada] Crash on nesting of subunits with bodies acting as specs
authorJustin Squirek <squirek@adacore.com>
Tue, 11 Dec 2018 11:09:08 +0000 (11:09 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Tue, 11 Dec 2018 11:09:08 +0000 (11:09 +0000)
commitad9741234fdd5794992d151d09cd10c03b9b91ab
treebd20601f62adac3c54b9fdd3c69f481b1f116eb3
parent3037779978033f27614b04d4b21f4ec5d4f6b7ca
[Ada] Crash on nesting of subunits with bodies acting as specs

This patch corrects an issue whereby a set of nested subunits including
subprogram subunits acting as bodies would cause a crash when a child
subunit "withs" an ansestor in certain instances due to a mismanagment
of the scope stack.

------------
-- Source --
------------

--  w.ads

package W is
end;

--  w-b.ads

package W.B is
  pragma Elaborate_Body;
end;

--  w-b.adb

with W.B.C;

package body w.B is end;

--  w-b-c.adb

with W;
procedure W.B.C is
  package D is
    procedure E;
  end;
  package body D is separate;
begin
  null;
end;

--  w-b-c-d.adb

separate (W.B.C)
package body D is
  procedure E is separate;
end;

--  w-b-c-d-e.adb

with W;

separate (W.B.C.D)
procedure E is
begin
  null;
end;

-----------------
-- Compilation --
-----------------

$ gnatmake -q w-b.adb

2018-12-11  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_ch10.adb (Analyze_Subunit): Modify conditional to fully
remove parent contexts from library-level subprogram bodies in
addition to package bodies.

From-SVN: r266978
gcc/ada/ChangeLog
gcc/ada/sem_ch10.adb