diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2011-09-24 09:55:01 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-09-24 09:55:01 +0000 |
commit | a271590a43eb22cee96e2c5c3b7a11816502033f (patch) | |
tree | 37a53ad2a2bb447786b15d918c7a248400241fa4 /gcc/cp/method.c | |
parent | ee02baae96517c43f9045fe2cb8f89605bbed1bb (diff) | |
download | gcc-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.c | 9 |
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. */ |