aboutsummaryrefslogtreecommitdiff
path: root/gcc/ada
diff options
context:
space:
mode:
authorSteve Baird <baird@adacore.com>2019-09-18 08:32:05 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-09-18 08:32:05 +0000
commitdcbe49a6c41e586e961664512726799a540757ee (patch)
tree07231a2330abb2bdd851673b99409f8f2329cbf7 /gcc/ada
parente42183e72bf600aff07cdf051c2166d36fb1889d (diff)
downloadgcc-dcbe49a6c41e586e961664512726799a540757ee.zip
gcc-dcbe49a6c41e586e961664512726799a540757ee.tar.gz
gcc-dcbe49a6c41e586e961664512726799a540757ee.tar.bz2
[Ada] No Storage_Error for an oversized disabled ghost array object
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
Diffstat (limited to 'gcc/ada')
-rw-r--r--gcc/ada/ChangeLog6
-rw-r--r--gcc/ada/freeze.adb3
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index c13fa24..0c1c554 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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.
diff --git a/gcc/ada/freeze.adb b/gcc/ada/freeze.adb
index bb17e42..93e91b2 100644
--- a/gcc/ada/freeze.adb
+++ b/gcc/ada/freeze.adb
@@ -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;