aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/method.c
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2011-09-24 09:55:01 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-09-24 09:55:01 +0000
commita271590a43eb22cee96e2c5c3b7a11816502033f (patch)
tree37a53ad2a2bb447786b15d918c7a248400241fa4 /gcc/cp/method.c
parentee02baae96517c43f9045fe2cb8f89605bbed1bb (diff)
downloadgcc-a271590a43eb22cee96e2c5c3b7a11816502033f.zip
gcc-a271590a43eb22cee96e2c5c3b7a11816502033f.tar.gz
gcc-a271590a43eb22cee96e2c5c3b7a11816502033f.tar.bz2
re PR c++/44267 (SFINAE does not handle down static_cast over virtual inheritance)
/cp 2011-09-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44267 * class.c (build_base_path): Add a tsubst_flags_t parameter. (convert_to_base): Adjust call. * typeck.c (build_class_member_access_expr, get_member_function_from_ptrfunc, build_static_cast_1): Likewise. * init.c (dfs_initialize_vtbl_ptrs, emit_mem_initializers): Likewise. * method.c (do_build_copy_constructor, do_build_copy_assign): Likewise. * rtti.c (build_dynamic_cast_1): Likewise. * typeck2.c (build_scoped_ref, build_m_component_ref): Likewise. * call.c (build_over_call, build_special_member_call): Likewise. * cvt.c (cp_convert_to_pointer, convert_to_pointer_force, build_up_reference): Likewise. * cp-tree.h (build_base_path): Adjust declaration. /testsuite 2011-09-24 Paolo Carlini <paolo.carlini@oracle.com> PR c++/44267 * g++.dg/template/sfinae28.C: New. From-SVN: r179141
Diffstat (limited to 'gcc/cp/method.c')
-rw-r--r--gcc/cp/method.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/cp/method.c b/gcc/cp/method.c
index 757e711..88bb2a9 100644
--- a/gcc/cp/method.c
+++ b/gcc/cp/method.c
@@ -516,7 +516,8 @@ do_build_copy_constructor (tree fndecl)
for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
VEC_iterate (tree, vbases, i, binfo); i++)
{
- init = build_base_path (PLUS_EXPR, parm, binfo, 1);
+ init = build_base_path (PLUS_EXPR, parm, binfo, 1,
+ tf_warning_or_error);
if (move_p)
init = move (init);
member_init_list
@@ -531,7 +532,8 @@ do_build_copy_constructor (tree fndecl)
if (BINFO_VIRTUAL_P (base_binfo))
continue;
- init = build_base_path (PLUS_EXPR, parm, base_binfo, 1);
+ init = build_base_path (PLUS_EXPR, parm, base_binfo, 1,
+ tf_warning_or_error);
if (move_p)
init = move (init);
member_init_list
@@ -624,7 +626,8 @@ do_build_copy_assign (tree fndecl)
/* We must convert PARM directly to the base class
explicitly since the base class may be ambiguous. */
- converted_parm = build_base_path (PLUS_EXPR, parm, base_binfo, 1);
+ converted_parm = build_base_path (PLUS_EXPR, parm, base_binfo, 1,
+ tf_warning_or_error);
if (move_p)
converted_parm = move (converted_parm);
/* Call the base class assignment operator. */