[Ada] T'Size in pragma Compile_Time_Error
authorBob Duff <duff@adacore.com>
Thu, 10 Oct 2019 15:23:37 +0000 (15:23 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 10 Oct 2019 15:23:37 +0000 (15:23 +0000)
2019-10-10  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_prag.adb (Defer_Compile_Time_Warning_Error_To_BE): In
addition to saving the pragma for further processing, copy the
pragma into the main unit if necessary.

From-SVN: r276819

gcc/ada/ChangeLog
gcc/ada/sem_prag.adb

index 082fcf4..0182d18 100644 (file)
@@ -1,6 +1,5 @@
 2019-10-10  Bob Duff  <duff@adacore.com>
 
-       * einfo.ads, einfo.adb (Invariants_Ignored): New flag on types.
-       This leaves just one unused flag.
-       * sem_prag.adb (Invariant): Set the flag if appropriate.
-       * exp_util.adb (Make_Invariant_Call): Check the flag.
\ No newline at end of file
+       * sem_prag.adb (Defer_Compile_Time_Warning_Error_To_BE): In
+       addition to saving the pragma for further processing, copy the
+       pragma into the main unit if necessary.
\ No newline at end of file
index f9ce1d9..fbfa0e0 100644 (file)
@@ -32197,6 +32197,15 @@ package body Sem_Prag is
         (New_Val => CTWE_Entry'(Eloc  => Sloc (Arg1),
                                 Scope => Current_Scope,
                                 Prag  => N));
+
+      --  If the Boolean expression contains T'Size, and we're not in the main
+      --  unit being compiled, then we need to copy the pragma into the main
+      --  unit, because otherwise T'Size might never be computed, leaving it
+      --  as 0.
+
+      if not In_Extended_Main_Code_Unit (N) then
+         Insert_Library_Level_Action (New_Copy_Tree (N));
+      end if;
    end Defer_Compile_Time_Warning_Error_To_BE;
 
    ------------------------------------------