aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2012-09-10 10:08:24 -0400
committerJason Merrill <jason@gcc.gnu.org>2012-09-10 10:08:24 -0400
commit091871eadd59a8f69413e5c480e2df8c3538f409 (patch)
treef09bc89964b895bcf2c4423ab885af79b02f0895 /gcc/cp
parentd75171f35f62918f604ab856643cac9f691b237c (diff)
downloadgcc-091871eadd59a8f69413e5c480e2df8c3538f409.zip
gcc-091871eadd59a8f69413e5c480e2df8c3538f409.tar.gz
gcc-091871eadd59a8f69413e5c480e2df8c3538f409.tar.bz2
* semantics.c (sort_constexpr_mem_initializers): Tweak.
From-SVN: r191139
Diffstat (limited to 'gcc/cp')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/semantics.c26
2 files changed, 18 insertions, 12 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 371fdfe..64b591f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,7 @@
+2012-09-07 Jason Merrill <jason@redhat.com>
+
+ * semantics.c (sort_constexpr_mem_initializers): Tweak.
+
2012-09-09 Mark Kettenis <kettenis@openbsd.org>
* decl.c (reshape_init_class): Avoid dereferencing a
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 7cd1468..642e15d 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5903,24 +5903,26 @@ check_constexpr_ctor_body (tree last, tree list)
static VEC(constructor_elt,gc) *
sort_constexpr_mem_initializers (tree type, VEC(constructor_elt,gc) *vec)
{
- if (!CLASSTYPE_HAS_PRIMARY_BASE_P (type)
- || (CLASSTYPE_PRIMARY_BINFO (type)
- == BINFO_BASE_BINFO (TYPE_BINFO (type), 0)))
+ tree pri = CLASSTYPE_PRIMARY_BINFO (type);
+ constructor_elt elt;
+ int i;
+
+ if (pri == NULL_TREE
+ || pri == BINFO_BASE_BINFO (TYPE_BINFO (type), 0))
return vec;
/* Find the element for the primary base and move it to the beginning of
the vec. */
- tree pri = BINFO_TYPE (CLASSTYPE_PRIMARY_BINFO (type));
VEC(constructor_elt,gc) &v = *vec;
- int pri_idx;
-
- for (pri_idx = 1; ; ++pri_idx)
- if (TREE_TYPE (v[pri_idx].index) == pri)
+ pri = BINFO_TYPE (pri);
+ for (i = 1; ; ++i)
+ if (TREE_TYPE (v[i].index) == pri)
break;
- constructor_elt pri_elt = v[pri_idx];
- for (int i = 0; i < pri_idx; ++i)
- v[i+1] = v[i];
- v[0] = pri_elt;
+
+ elt = v[i];
+ for (; i > 0; --i)
+ v[i] = v[i-1];
+ v[0] = elt;
return vec;
}