decl.c (gnat_to_gnu_entity): Do not force a non-null size if it has overflowed.
authorEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 31 Mar 2008 19:14:08 +0000 (19:14 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Mon, 31 Mar 2008 19:14:08 +0000 (19:14 +0000)
* decl.c (gnat_to_gnu_entity) <object>: Do not force a non-null
size if it has overflowed.

From-SVN: r133768

gcc/ada/ChangeLog
gcc/ada/decl.c
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/object_overflow.adb [new file with mode: 0644]

index d10a213bb8169a38d0449ef8ac4b3343cc1cfb6f..f5b9df21c6dd3e9b1dc5a2e3775a3dc516b41d8f 100644 (file)
@@ -1,5 +1,10 @@
+2008-03-31  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * decl.c (gnat_to_gnu_entity) <object>: Do not force a non-null
+       size if it has overflowed.
+
 2008-03-31  Olivier Hainque  <hainque@adacore.com>
-            Eric Botcazou  <botcazou@adacore.com>
+            Eric Botcazou  <ebotcazou@adacore.com>
 
        * utils2.c (find_common_type): Document assumption on t1/t2 vs
        lhs/rhs. Force use of lhs type if smaller, whatever the modes.
index 88198745fa892ca4e6a976f40a3560fce04c4583..6f92fac5428ead4462a4003dccb06bc5e2445049 100644 (file)
@@ -640,8 +640,12 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
           clause, as we would lose useful information on the view size
           (e.g. for null array slices) and we are not allocating the object
           here anyway.  */
-       if (((gnu_size && integer_zerop (gnu_size))
-            || (TYPE_SIZE (gnu_type) && integer_zerop (TYPE_SIZE (gnu_type))))
+       if (((gnu_size
+             && integer_zerop (gnu_size)
+             && !TREE_OVERFLOW (gnu_size))
+            || (TYPE_SIZE (gnu_type)
+                && integer_zerop (TYPE_SIZE (gnu_type))
+                && !TREE_OVERFLOW (TYPE_SIZE (gnu_type))))
            && (!Is_Constr_Subt_For_UN_Aliased (Etype (gnat_entity))
                || !Is_Array_Type (Etype (gnat_entity)))
            && !Present (Renamed_Object (gnat_entity))
index b62c44e66508c2364875aeb16d4c2b10a6b7d655..ba35c2b25426661c528fd80ca1bc62dcf8d05ca2 100644 (file)
@@ -1,3 +1,7 @@
+2008-03-31  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * gnat.dg/object_overflow.adb: New test.
+
 2008-03-31  Andrew Pinski  <andrew_pinski@playstation.sony.com>
 
        PR middle-end/30186
diff --git a/gcc/testsuite/gnat.dg/object_overflow.adb b/gcc/testsuite/gnat.dg/object_overflow.adb
new file mode 100644 (file)
index 0000000..820e936
--- /dev/null
@@ -0,0 +1,14 @@
+-- { dg-do compile }
+
+procedure Object_Overflow is
+
+  type Rec is null record;
+
+  procedure Proc (x : Rec) is begin null; end;
+
+  type Arr is array(Long_Integer) of Rec;
+  Obj : Arr; -- { dg-warning "Storage_Error will be raised" }
+
+begin
+  Proc (Obj(1));
+end;