summaryrefslogtreecommitdiff
path: root/gcc/cp/semantics.c
diff options
context:
space:
mode:
authorJason Merrill <jason@gcc.gnu.org>2010-12-13 15:46:34 -0500
committerJason Merrill <jason@gcc.gnu.org>2010-12-13 15:46:34 -0500
commit42aa5ada5f8cad29ee89c1d3766f45ded0f0a524 (patch)
tree52863ba1474c8225ec04f661f4594ffb8b251902 /gcc/cp/semantics.c
parentf0c2df63c64cb18ff1e8be7d0042108efd6483b3 (diff)
downloadgcc-42aa5ada5f8cad29ee89c1d3766f45ded0f0a524.tar.gz
foo
From-SVN: r167769
Diffstat (limited to 'gcc/cp/semantics.c')
-rw-r--r--gcc/cp/semantics.c17
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