diff options
author | Richard Henderson <rth@redhat.com> | 2004-06-30 12:53:14 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-06-30 12:53:14 -0700 |
commit | 9117ccad0c195d26cc27f4ccfede367255c2bc03 (patch) | |
tree | ebf4f6b068a982ecc5323251c4b1f9871624c6fb | |
parent | aff982b1118d95c976ec712fad9249511e1e8d5d (diff) | |
download | gcc-9117ccad0c195d26cc27f4ccfede367255c2bc03.zip gcc-9117ccad0c195d26cc27f4ccfede367255c2bc03.tar.gz gcc-9117ccad0c195d26cc27f4ccfede367255c2bc03.tar.bz2 |
init.c (build_new_1): Fill in TYPE_DOMAIN, TYPE_SIZE and TYPE_SIZE_UNIT of full_type.
* init.c (build_new_1): Fill in TYPE_DOMAIN, TYPE_SIZE and
TYPE_SIZE_UNIT of full_type.
From-SVN: r83927
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/init.c | 27 |
2 files changed, 30 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8ff4200..1c138da 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2004-06-30 Richard Henderson <rth@redhat.com> + + * init.c (build_new_1): Fill in TYPE_DOMAIN, TYPE_SIZE and + TYPE_SIZE_UNIT of full_type. + 2004-06-30 Per Bothner <per@bothner.com> Conditionally compile support for --enable-mapped_location. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 4e02b9d..1be0118 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1815,10 +1815,20 @@ build_new_1 (tree exp) if (nelts) { + tree index; + has_array = 1; outer_nelts = nelts; - /* Use an incomplete array type to avoid VLA headaches. */ + + /* ??? The middle-end will error on us for building a VLA outside a + function context. Methinks that's not it's purvey. So we'll do + our own VLA layout later. */ + full_type = build_cplus_array_type (type, NULL_TREE); + + index = convert (sizetype, nelts); + index = size_binop (MINUS_EXPR, index, size_one_node); + TYPE_DOMAIN (full_type) = build_index_type (index); } else full_type = type; @@ -1857,7 +1867,20 @@ build_new_1 (tree exp) size = size_in_bytes (true_type); if (has_array) - size = size_binop (MULT_EXPR, size, convert (sizetype, nelts)); + { + tree n, bitsize; + + /* Do our own VLA layout. Setting TYPE_SIZE/_UNIT is necessary in + order for the <INIT_EXPR <*foo> <CONSTRUCTOR ...>> to be valid. */ + + n = convert (sizetype, nelts); + size = size_binop (MULT_EXPR, size, n); + TYPE_SIZE_UNIT (full_type) = size; + + n = convert (bitsizetype, nelts); + bitsize = size_binop (MULT_EXPR, TYPE_SIZE (true_type), n); + TYPE_SIZE (full_type) = bitsize; + } /* Allocate the object. */ if (! placement && TYPE_FOR_JAVA (true_type)) |