[Ada] Unnesting and annex E
authorArnaud Charlet <charlet@adacore.com>
Fri, 13 Dec 2019 09:05:38 +0000 (09:05 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Fri, 13 Dec 2019 09:05:38 +0000 (09:05 +0000)
2019-12-13  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_unst.adb (Unnest_Subprogram): Account for trees produced
by Annex E constructs.

From-SVN: r279367

gcc/ada/ChangeLog
gcc/ada/exp_unst.adb

index cfa051ad3124874d27d3804b6f449b8a803da77f..d48a3610e55bda42b0fd931c94d27673d452a094 100644 (file)
@@ -1,3 +1,8 @@
+2019-12-13  Arnaud Charlet  <charlet@adacore.com>
+
+       * exp_unst.adb (Unnest_Subprogram): Account for trees produced
+       by Annex E constructs.
+
 2019-12-13  Ghjuvan Lacambre  <lacambre@adacore.com>
 
        * doc/gnat_rm/implementation_defined_pragmas.rst: Update
index f016d2f4d4991738a5dd37cc574a4ca77e0b4055..1747281a00b3580367407e69d9e32cd8b8bcde38 100644 (file)
@@ -414,11 +414,14 @@ package body Exp_Unst is
       then
          return;
 
-      --  Only unnest when generating code for the main source unit or if we're
-      --  unnesting for inline.
+      --  Only unnest when generating code for the main source unit or if
+      --  we're unnesting for inline.  But in some Annex E cases the Sloc
+      --  points to a different unit, so also make sure that the Parent
+      --  isn't in something that we know we're generating code for.
 
       elsif not For_Inline
         and then not In_Extended_Main_Code_Unit (Subp_Body)
+        and then not In_Extended_Main_Code_Unit (Parent (Subp_Body))
       then
          return;
       end if;