From 9117ccad0c195d26cc27f4ccfede367255c2bc03 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Wed, 30 Jun 2004 12:53:14 -0700 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/init.c | 27 +++++++++++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8ff420081de..1c138dae2b2 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2004-06-30 Richard Henderson + + * init.c (build_new_1): Fill in TYPE_DOMAIN, TYPE_SIZE and + TYPE_SIZE_UNIT of full_type. + 2004-06-30 Per Bothner Conditionally compile support for --enable-mapped_location. diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 4e02b9d2bae..1be01180426 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 > 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))