diff options
author | Jason Merrill <jason@gcc.gnu.org> | 2010-12-13 15:46:34 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2010-12-13 15:46:34 -0500 |
commit | 42aa5ada5f8cad29ee89c1d3766f45ded0f0a524 (patch) | |
tree | 52863ba1474c8225ec04f661f4594ffb8b251902 /gcc/cp/semantics.c | |
parent | f0c2df63c64cb18ff1e8be7d0042108efd6483b3 (diff) | |
download | gcc-42aa5ada5f8cad29ee89c1d3766f45ded0f0a524.tar.gz |
foo
From-SVN: r167769
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r-- | gcc/cp/semantics.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 7e4255325d2..1b3bfa33919 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -5485,9 +5485,20 @@ build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec) init = unshare_expr (TREE_OPERAND (t, 1)); if (TREE_CODE (member) == INDIRECT_REF) { - /* Don't put out anything for an empty base. */ - gcc_assert (is_empty_class (TREE_TYPE (member))); - return true; + tree op = TREE_OPERAND (member, 0); + STRIP_NOPS (op); + gcc_assert (TREE_CODE (op) == ADDR_EXPR); + op = TREE_OPERAND (op, 0); + if (TREE_CODE (op) == COMPONENT_REF) + /* Initializing a cv-qualified member; we just looked through + the const_cast. */ + member = op; + else + { + /* Initializing an empty base; just skip it. */ + gcc_assert (is_empty_class (TREE_TYPE (member))); + return true; + } } } else |