diff options
author | Jason Merrill <jason@redhat.com> | 2012-06-25 11:17:59 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-06-25 11:17:59 -0400 |
commit | 72de8622ae2d5aaeb58173f454aed87640a989b5 (patch) | |
tree | 245bea25403bebfde4c9b5f9652145736aa9e004 /gcc/cp | |
parent | 443679ae80afd9cc621d0d6bae5d431a294d0ec2 (diff) | |
download | gcc-72de8622ae2d5aaeb58173f454aed87640a989b5.zip gcc-72de8622ae2d5aaeb58173f454aed87640a989b5.tar.gz gcc-72de8622ae2d5aaeb58173f454aed87640a989b5.tar.bz2 |
re PR c++/53202 (Copy constructor not called when starting a thread)
PR c++/53202
* semantics.c (build_data_member_initialization): Always keep
initializer for empty base.
(cxx_eval_bare_aggregate): Discard it here.
From-SVN: r188940
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 13 |
2 files changed, 13 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index df3a917..f87b4d6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,10 @@ 2012-06-25 Jason Merrill <jason@redhat.com> + PR c++/53202 + * semantics.c (build_data_member_initialization): Always keep + initializer for empty base. + (cxx_eval_bare_aggregate): Discard it here. + PR c++/53565 * pt.c (tsubst_omp_for_iterator): Simplify DECL_EXPR handling. (tsubst_expr) [OMP_FOR]: Here, too. diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index ee41861..2d64a66 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5838,12 +5838,9 @@ build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec) member = op; else { - /* We don't put out anything for an empty base. */ + /* This is an initializer for an empty base; keep it for now so + we can check it in cxx_eval_bare_aggregate. */ gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member)))); - /* But if the initializer isn't constexpr, leave it in so we - complain later. */ - if (potential_constant_expression (init)) - return true; } } if (TREE_CODE (member) == ADDR_EXPR) @@ -7064,6 +7061,12 @@ cxx_eval_bare_aggregate (const constexpr_call *call, tree t, constructor_elt *inner = base_field_constructor_elt (n, ce->index); inner->value = elt; } + else if (TREE_CODE (ce->index) == NOP_EXPR) + { + /* This is an initializer for an empty base; now that we've + checked that it's constant, we can ignore it. */ + gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (ce->index)))); + } else CONSTRUCTOR_APPEND_ELT (n, ce->index, elt); } |