diff options
author | Jason Merrill <jason@redhat.com> | 2011-08-25 14:22:54 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-08-25 14:22:54 -0400 |
commit | 0ab71f306cd6148c0c9f93418a86763ee2cd4b72 (patch) | |
tree | c3896711c344072311800b26a4eaa85eb78cb8f7 /gcc/cp | |
parent | 7888350f3973a45d98581573bcf7773eb10d8322 (diff) | |
download | gcc-0ab71f306cd6148c0c9f93418a86763ee2cd4b72.zip gcc-0ab71f306cd6148c0c9f93418a86763ee2cd4b72.tar.gz gcc-0ab71f306cd6148c0c9f93418a86763ee2cd4b72.tar.bz2 |
* call.c (convert_like_real): Remove redundant complain checks.
From-SVN: r178082
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/cp/call.c | 60 |
2 files changed, 26 insertions, 36 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 92363ff..10e64ef 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,7 @@ 2011-08-25 Jason Merrill <jason@redhat.com> + * call.c (convert_like_real): Remove redundant complain checks. + PR c++/50157 * call.c (convert_like_real): Exit early if bad and !tf_error. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index d911b3a..dc35824 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -5733,11 +5733,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, empty list, since that is handled separately in 8.5.4. */ && cand->num_convs > 0) { - if (complain & tf_error) - error ("converting to %qT from initializer list would use " - "explicit constructor %qD", totype, convfn); - else - return error_mark_node; + error ("converting to %qT from initializer list would use " + "explicit constructor %qD", totype, convfn); } /* Set user_conv_p on the argument conversions, so rvalue/base @@ -5789,6 +5786,9 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, } return expr; case ck_ambig: + /* We leave bad_p off ck_ambig because overload resolution considers + it valid, it just fails when we try to perform it. So we need to + check complain here, too. */ if (complain & tf_error) { /* Call build_user_type_conversion again for the error. */ @@ -5899,14 +5899,9 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, /* Copy-list-initialization doesn't actually involve a copy. */ return expr; expr = build_temp (expr, totype, flags, &diag_kind, complain); - if (diag_kind && fn) - { - if ((complain & tf_error)) - emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0, - " initializing argument %P of %qD", argnum, fn); - else if (diag_kind == DK_ERROR) - return error_mark_node; - } + if (diag_kind && fn && complain) + emit_diagnostic (diag_kind, DECL_SOURCE_LOCATION (fn), 0, + " initializing argument %P of %qD", argnum, fn); return build_cplus_new (totype, expr, complain); case ck_ref_bind: @@ -5916,13 +5911,10 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, if (convs->bad_p && TYPE_REF_IS_RVALUE (ref_type) && real_lvalue_p (expr)) { - if (complain & tf_error) - { - error ("cannot bind %qT lvalue to %qT", - TREE_TYPE (expr), totype); - if (fn) - error (" initializing argument %P of %q+D", argnum, fn); - } + error ("cannot bind %qT lvalue to %qT", + TREE_TYPE (expr), totype); + if (fn) + error (" initializing argument %P of %q+D", argnum, fn); return error_mark_node; } @@ -5948,19 +5940,16 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, if (!CP_TYPE_CONST_NON_VOLATILE_P (type) && !TYPE_REF_IS_RVALUE (ref_type)) { - if (complain & tf_error) - { - /* If the reference is volatile or non-const, we - cannot create a temporary. */ - if (lvalue & clk_bitfield) - error ("cannot bind bitfield %qE to %qT", - expr, ref_type); - else if (lvalue & clk_packed) - error ("cannot bind packed field %qE to %qT", - expr, ref_type); - else - error ("cannot bind rvalue %qE to %qT", expr, ref_type); - } + /* If the reference is volatile or non-const, we + cannot create a temporary. */ + if (lvalue & clk_bitfield) + error ("cannot bind bitfield %qE to %qT", + expr, ref_type); + else if (lvalue & clk_packed) + error ("cannot bind packed field %qE to %qT", + expr, ref_type); + else + error ("cannot bind rvalue %qE to %qT", expr, ref_type); return error_mark_node; } /* If the source is a packed field, and we must use a copy @@ -5973,9 +5962,8 @@ convert_like_real (conversion *convs, tree expr, tree fn, int argnum, && CLASS_TYPE_P (type) && type_has_nontrivial_copy_init (type)) { - if (complain & tf_error) - error ("cannot bind packed field %qE to %qT", - expr, ref_type); + error ("cannot bind packed field %qE to %qT", + expr, ref_type); return error_mark_node; } if (lvalue & clk_bitfield) |