diff options
author | Jason Merrill <jason@redhat.com> | 2012-09-10 10:08:24 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-09-10 10:08:24 -0400 |
commit | 091871eadd59a8f69413e5c480e2df8c3538f409 (patch) | |
tree | f09bc89964b895bcf2c4423ab885af79b02f0895 /gcc/cp | |
parent | d75171f35f62918f604ab856643cac9f691b237c (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 26 |
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; } |