foo
authorJason Merrill <jason@gcc.gnu.org>
Mon, 13 Dec 2010 20:46:34 +0000 (15:46 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Mon, 13 Dec 2010 20:46:34 +0000 (15:46 -0500)
From-SVN: r167769

gcc/cp/semantics.c

index 7e4255325d2b5ff437401e64960a6bc3fd7f66de..1b3bfa33919eb5d2cb18a642ca0a2615a5abe4d1 100644 (file)
@@ -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