[Ada] No Storage_Error for an oversized disabled ghost array object
authorSteve Baird <baird@adacore.com>
Wed, 18 Sep 2019 08:32:05 +0000 (08:32 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 18 Sep 2019 08:32:05 +0000 (08:32 +0000)
In some cases where the size computation for an object declaration will
unconditionally overflow, the FE generates code to raise Storage_Error
at the point of the object declaration (and may generate an associated
warning). Don't do this if the object declaration is an ignored (i.e.,
disabled) ghost declaration.

2019-09-18  Steve Baird  <baird@adacore.com>

gcc/ada/

* freeze.adb (Freeze_Object_Declaration): Do not call
Check_Large_Modular_Array when the object declaration being
frozen is an ignored ghost entity.

gcc/testsuite/

* gnat.dg/ghost7.adb, gnat.dg/ghost7.ads: New testcase.

From-SVN: r275845

gcc/ada/ChangeLog
gcc/ada/freeze.adb
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/ghost7.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/ghost7.ads [new file with mode: 0644]

index c13fa24..0c1c554 100644 (file)
@@ -1,3 +1,9 @@
+2019-09-18  Steve Baird  <baird@adacore.com>
+
+       * freeze.adb (Freeze_Object_Declaration): Do not call
+       Check_Large_Modular_Array when the object declaration being
+       frozen is an ignored ghost entity.
+
 2019-09-18  Tom Tromey  <tromey@adacore.com>
 
        * make.adb (Initialize): Fix typo.
index bb17e42..93e91b2 100644 (file)
@@ -3569,7 +3569,8 @@ package body Freeze is
             Error_Msg_N ("\??use explicit size clause to set size", E);
          end if;
 
-         if Is_Array_Type (Typ) then
+         --  Declaring a too-big array in disabled ghost code is OK
+         if Is_Array_Type (Typ) and then not Is_Ignored_Ghost_Entity (E) then
             Check_Large_Modular_Array (Typ);
          end if;
       end Freeze_Object_Declaration;
index 1db62e2..c3f82a5 100644 (file)
@@ -1,3 +1,7 @@
+2019-09-18  Steve Baird  <baird@adacore.com>
+
+       * gnat.dg/ghost7.adb, gnat.dg/ghost7.ads: New testcase.
+
 2019-09-18  Olivier Hainque  <hainque@adacore.com>
 
        * gnat.dg/system_info1.adb: New testcase.
diff --git a/gcc/testsuite/gnat.dg/ghost7.adb b/gcc/testsuite/gnat.dg/ghost7.adb
new file mode 100644 (file)
index 0000000..977cdd2
--- /dev/null
@@ -0,0 +1,6 @@
+--  { dg-do compile }
+--  { dg-options "-gnatwa" }
+
+package body Ghost7 is
+   procedure Dummy is null;
+end Ghost7;
diff --git a/gcc/testsuite/gnat.dg/ghost7.ads b/gcc/testsuite/gnat.dg/ghost7.ads
new file mode 100644 (file)
index 0000000..4042aa3
--- /dev/null
@@ -0,0 +1,8 @@
+pragma Restrictions (No_Exception_Propagation);
+
+package Ghost7 is
+   type Word64 is mod 2**64;
+   type My_Array_Type is array (Word64) of Boolean;
+   My_Array : My_Array_Type with Ghost;
+   procedure Dummy;
+end Ghost7;
\ No newline at end of file