[Ada] Crash on compilation unit instance
authorHristian Kirtchev <kirtchev@adacore.com>
Thu, 24 May 2018 13:04:24 +0000 (13:04 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 24 May 2018 13:04:24 +0000 (13:04 +0000)
commit7dcac7d1468a3b5b69f5a04d2ca0919b515fddba
treec89008dcaf0bbb3973a888a86bc8f877ba4baf12
parent443ee9566b50a59f4e1a057ffdda8fba4002dde3
[Ada] Crash on compilation unit instance

Do not generate a variable marker for a reference which appears within the
formal part of an instantiation which acts as a compilation unit because
there is no suitable insertion context.

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

--  gnat.adc

pragma SPARK_Mode (On);

--  gen.ads

generic
   Val_1 : Integer;
   Val_2 : Integer;
package Gen is
end Gen;

--  pack.ads

package Pack is
   Val : Integer := 123;

   function Get_Val return Integer;
end Pack;

--  inst.ads

with Gen;
with Pack; use Pack;

package Inst is new Gen (Val, Get_Val);

--  proc.adb

with Pack; use Pack;

procedure Proc (Val_1 : Integer := Val; Val_2 : Integer := Get_Val) is
begin null; end Proc;

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

$ gcc -c inst.ads
$ gcc -c inst.ads -gnatd.F
$ gcc -c proc.adb
$ gcc -c proc.adb -gnatd.F

2018-05-24  Hristian Kirtchev  <kirtchev@adacore.com>

gcc/ada/

* sem_elab.adb (Build_Variable_Reference_Marker): Do not create a
variable marker when the reference appears in the formal part of a
compilation unit instance because there is no place to insert it.
(In_Compilation_Instance_Formal_Part): New routine.

From-SVN: r260643
gcc/ada/ChangeLog
gcc/ada/sem_elab.adb