]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: adjust conversion diagnostics
authorJason Merrill <jason@redhat.com>
Thu, 23 Mar 2023 14:41:29 +0000 (10:41 -0400)
committerJason Merrill <jason@redhat.com>
Wed, 10 May 2023 21:07:43 +0000 (17:07 -0400)
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.

gcc/cp/call.cc

index 2a06520c0c107e5b66f2caef514d445c3f66f914..48611bb16a3a5c0546ad964f4c928d0437006dab 100644 (file)
@@ -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))