aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2023-03-23 10:41:29 -0400
committerJason Merrill <jason@redhat.com>2023-05-10 17:07:43 -0400
commit62c4d34ec005e95f000ffabd34da440dc62ac346 (patch)
treef0e036086281efe56cbfa2dc73439a951fd24f75
parent608e7f3ab47fe746279c552c3574147aa3d8ee76 (diff)
downloadgcc-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.cc20
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))