aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@adacore.com>2011-04-02 09:38:22 +0000
committerEric Botcazou <ebotcazou@gcc.gnu.org>2011-04-02 09:38:22 +0000
commit8ffac116df93baf38130a6a7de2d419b04dae660 (patch)
tree42940b22d690719ccf797ddfd601469fcfa24885
parentde9528f0291faf10d65dd7b00f7101005c2ee38a (diff)
downloadgcc-8ffac116df93baf38130a6a7de2d419b04dae660.zip
gcc-8ffac116df93baf38130a6a7de2d419b04dae660.tar.gz
gcc-8ffac116df93baf38130a6a7de2d419b04dae660.tar.bz2
utils2.c (build_allocator): In the unconstrained array type case...
* gcc-interface/utils2.c (build_allocator): In the unconstrained array type case, do not strip a padding type around the array type. From-SVN: r171888
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/gcc-interface/utils2.c15
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gnat.dg/specs/aggr2.ads14
4 files changed, 26 insertions, 12 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 2a1eba4..8f164e5 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,5 +1,10 @@
2011-04-02 Eric Botcazou <ebotcazou@adacore.com>
+ * gcc-interface/utils2.c (build_allocator): In the unconstrained array
+ type case, do not strip a padding type around the array type.
+
+2011-04-02 Eric Botcazou <ebotcazou@adacore.com>
+
* gcc-interface/utils.c (update_pointer_to): Finalize named pointer
types.
diff --git a/gcc/ada/gcc-interface/utils2.c b/gcc/ada/gcc-interface/utils2.c
index 78f5fd9..240d345 100644
--- a/gcc/ada/gcc-interface/utils2.c
+++ b/gcc/ada/gcc-interface/utils2.c
@@ -2135,17 +2135,9 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
gnat_proc, gnat_pool, gnat_node);
storage = convert (storage_ptr_type, gnat_protect_expr (storage));
- if (TYPE_IS_PADDING_P (type))
- {
- type = TREE_TYPE (TYPE_FIELDS (type));
- if (init)
- init = convert (type, init);
- }
-
- /* If there is an initializing expression, make a constructor for
- the entire object including the bounds and copy it into the
- object. If there is no initializing expression, just set the
- bounds. */
+ /* If there is an initializing expression, then make a constructor for
+ the entire object including the bounds and copy it into the object.
+ If there is no initializing expression, just set the bounds. */
if (init)
{
VEC(constructor_elt,gc) *v = VEC_alloc (constructor_elt, gc, 2);
@@ -2154,7 +2146,6 @@ build_allocator (tree type, tree init, tree result_type, Entity_Id gnat_proc,
build_template (template_type, type, init));
CONSTRUCTOR_APPEND_ELT (v, DECL_CHAIN (TYPE_FIELDS (storage_type)),
init);
-
return convert
(result_type,
build2 (COMPOUND_EXPR, storage_ptr_type,
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 7f19c13..dff95d8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2011-04-02 Eric Botcazou <ebotcazou@adacore.com>
+ * gnat.dg/specs/aggr2.ads: New test.
+
+2011-04-02 Eric Botcazou <ebotcazou@adacore.com>
+
* gnat.dg/debug2.ad[sb]: New test.
* gnat.dg/debug2_pkg.ads: New helper.
* gnat.dg/debug3.ad[sb]: New test.
diff --git a/gcc/testsuite/gnat.dg/specs/aggr2.ads b/gcc/testsuite/gnat.dg/specs/aggr2.ads
new file mode 100644
index 0000000..8f7ea87
--- /dev/null
+++ b/gcc/testsuite/gnat.dg/specs/aggr2.ads
@@ -0,0 +1,14 @@
+-- { dg-do compile }
+
+package Aggr2 is
+
+ type Buffer is array (Positive range <>) of Boolean;
+ for Buffer'Alignment use 4;
+
+ type Buffer_Ptr is access Buffer;
+
+ subtype My_Buffer is Buffer (1 .. 2);
+
+ P : Buffer_Ptr := new My_Buffer'(Others => False);
+
+end Aggr2;