diff options
author | Jason Merrill <jason@redhat.com> | 2023-03-23 10:41:29 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2023-05-10 17:07:43 -0400 |
commit | 62c4d34ec005e95f000ffabd34da440dc62ac346 (patch) | |
tree | f0e036086281efe56cbfa2dc73439a951fd24f75 | |
parent | 608e7f3ab47fe746279c552c3574147aa3d8ee76 (diff) | |
download | gcc-62c4d34ec005e95f000ffabd34da440dc62ac346.zip gcc-62c4d34ec005e95f000ffabd34da440dc62ac346.tar.gz gcc-62c4d34ec005e95f000ffabd34da440dc62ac346.tar.bz2 |
c++: adjust conversion diagnostics
While looking at PR109247 I made this change to improve diagnostics. I
don't think I'm going ahead with that patch, but this still seems like a
worthy cleanup.
gcc/cp/ChangeLog:
* call.cc (convert_like_internal): Share ck_ref_bind handling
between all bad conversions.
-rw-r--r-- | gcc/cp/call.cc | 20 |
1 files changed, 9 insertions, 11 deletions
diff --git a/gcc/cp/call.cc b/gcc/cp/call.cc index 2a06520..48611bb 100644 --- a/gcc/cp/call.cc +++ b/gcc/cp/call.cc @@ -8360,15 +8360,6 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, /*issue_conversion_warnings=*/false, /*c_cast_p=*/false, /*nested_p=*/true, complain); - if (convs->kind == ck_ref_bind) - expr = convert_to_reference (totype, expr, CONV_IMPLICIT, - LOOKUP_NORMAL, NULL_TREE, - complain); - else - expr = cp_convert (totype, expr, complain); - if (complained) - maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum); - return expr; } else if (t->kind == ck_user || !t->bad_p) { @@ -8376,6 +8367,8 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, /*issue_conversion_warnings=*/false, /*c_cast_p=*/false, /*nested_p=*/true, complain); + if (t->bad_p) + complained = 1; break; } else if (t->kind == ck_ambig) @@ -8394,10 +8387,15 @@ convert_like_internal (conversion *convs, tree expr, tree fn, int argnum, "invalid conversion from %qH to %qI", TREE_TYPE (expr), totype); } + if (convs->kind == ck_ref_bind) + expr = convert_to_reference (totype, expr, CONV_IMPLICIT, + LOOKUP_NORMAL, NULL_TREE, + complain); + else + expr = cp_convert (totype, expr, complain); if (complained == 1) maybe_inform_about_fndecl_for_bogus_argument_init (fn, argnum); - - return cp_convert (totype, expr, complain); + return expr; } if (issue_conversion_warnings && (complain & tf_warning)) |