aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/call.c
diff options
context:
space:
mode:
authorVille Voutilainen <ville.voutilainen@gmail.com>2011-12-05 17:49:25 +0200
committerJason Merrill <jason@gcc.gnu.org>2011-12-05 10:49:25 -0500
commit238e471cadfb1c2995e6bc4c995328eacc39d0da (patch)
tree34698b82ecd5ca13de0629ef51d816a609fbb6ea /gcc/cp/call.c
parent12c574caf6f0766266813fef7be8a2367a9d0700 (diff)
downloadgcc-238e471cadfb1c2995e6bc4c995328eacc39d0da.zip
gcc-238e471cadfb1c2995e6bc4c995328eacc39d0da.tar.gz
gcc-238e471cadfb1c2995e6bc4c995328eacc39d0da.tar.bz2
Implement C++11 delegating constructors.
* cp-tree.h (enum cpp0x_warn_str): Add CPP0X_DELEGATING_CTORS. * error.c (maybe_warn_cpp0x): Adjust. * parser.c (cp_parser_mem_initializer_list): Use it. Diagnose multiple initializers if a delegating initializer is present. * call.c (build_special_member_call): Convert an assert into an if. * init.c (perform_target_ctor): New. (emit_mem_initializers): Use it. (expand_member_init, expand_default_init): Adjust. Co-Authored-By: Pedro LamarĂ£o <pedro.lamarao@gmail.com> From-SVN: r182012
Diffstat (limited to 'gcc/cp/call.c')
-rw-r--r--gcc/cp/call.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/cp/call.c b/gcc/cp/call.c
index 93d14be..d8fc4f1 100644
--- a/gcc/cp/call.c
+++ b/gcc/cp/call.c
@@ -6978,8 +6978,10 @@ build_special_member_call (tree instance, tree name, VEC(tree,gc) **args,
current_in_charge_parm, integer_zero_node),
current_vtt_parm,
vtt);
- gcc_assert (BINFO_SUBVTT_INDEX (binfo));
- sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
+ if (BINFO_SUBVTT_INDEX (binfo))
+ sub_vtt = fold_build_pointer_plus (vtt, BINFO_SUBVTT_INDEX (binfo));
+ else
+ sub_vtt = vtt;
if (args == NULL)
{