I broke out the "no viable candidates" case in build_new_method_call_1 into a subroutine, and added special-case handling for when there's a single non-viable candidate where there's an argument conversion error. I turned the error-handling from convert_for_assignment into a subroutine, calling it from this new special-case. This converts: demo.cc: In function 'int test_4(int, const char*, float)': demo.cc:5:44: error: no matching function for call to 's4::member_1(int&, const char*&, float&)' 5 | return s4::member_1 (first, second, third); | ^ demo.cc:1:24: note: candidate: 'static int s4::member_1(int, const char**, float)' 1 | struct s4 { static int member_1 (int one, const char **two, float three); }; | ^~~~~~~~ demo.cc:1:56: note: no known conversion for argument 2 from 'const char*' to 'const char**' 1 | struct s4 { static int member_1 (int one, const char **two, float three); }; | ~~~~~~~~~~~~~^~~ to: demo.cc: In function 'int test_4(int, const char*, float)': demo.cc:5:31: error: cannot convert 'const char*' to 'const char**' 5 | return s4::member_1 (first, second, third); | ^~~~~~ | | | const char* demo.cc:1:56: note: initializing argument 2 of 'static int s4::member_1(int, const char**, float)' 1 | struct s4 { static int member_1 (int one, const char **two, float three); }; | ~~~~~~~~~~~~~^~~ thus highlighting the problematic argument at the callsite (and its type). gcc/cp/ChangeLog: PR c++/85110 * call.c (struct conversion_info): Add "loc" field. (arg_conversion_rejection): Add "loc" param, using it to initialize the new field. (bad_arg_conversion_rejection): Likewise. (explicit_conversion_rejection): Initialize the new field to UNKNOWN_LOCATION. (template_conversion_rejection): Likewise. (add_function_candidate): Pass on the argument location to the new param of arg_conversion_rejection. (add_conv_candidate): Likewise. (build_builtin_candidate): Likewise. (build_user_type_conversion_1): Likewise. (single_z_candidate): New function. (maybe_get_bad_conversion_for_unmatched_call): New function. (complain_about_bad_argument): New function, based on part of convert_for_assignment. (build_new_method_call_1): Split out handling of the "no viable candidates" case into... (complain_about_no_candidates_for_method_call): ...this new function, and use the new functions above to special-case the handling of a single non-viable candidate due to a bad argument. * cp-tree.h (complain_about_bad_argument): New decl. * typeck.c (convert_for_assignment): Split out one error-handling case into complain_about_bad_argument. gcc/testsuite/ChangeLog: PR c++/85110 * g++.dg/cpp0x/explicit4.C: Update expected output to reflect special-casing of diagnostic for a single non-viable candidate due to a bad argument. * g++.dg/diagnostic/param-type-mismatch-2.C: Likewise. Add test coverage for an unmatched overloaded operator. * g++.dg/expr/pmf-1.C: Likewise. * g++.old-deja/g++.bugs/900330_02.C: Likewise. * g++.old-deja/g++.jason/conversion11.C: Likewise. * g++.old-deja/g++.law/arg11.C: Likewise. * g++.old-deja/g++.law/arm9.C: Likewise. * g++.old-deja/g++.robertl/eb131.C: Likewise. From-SVN: r264250
Name |
Last commit
|
Last update |
---|---|---|
.. | ||
access1.C | Loading commit data... | |
access2.C | Loading commit data... | |
access3.C | Loading commit data... | |
access4.C | Loading commit data... | |
access5.C | Loading commit data... | |
arg1.C | Loading commit data... | |
arg10.C | Loading commit data... | |
arg11.C | Loading commit data... | |
arg2.C | Loading commit data... | |
arg3.C | Loading commit data... | |
arg4.C | Loading commit data... | |
arg5.C | Loading commit data... | |
arg6.C | Loading commit data... | |
arg7.C | Loading commit data... | |
arg8.C | Loading commit data... | |
arg9.C | Loading commit data... | |
arm1.C | Loading commit data... | |
arm10.C | Loading commit data... | |
arm11.C | Loading commit data... | |
arm12.C | Loading commit data... | |
arm13.C | Loading commit data... | |
arm14.C | Loading commit data... | |
arm15.C | Loading commit data... | |
arm16.C | Loading commit data... | |
arm2.C | Loading commit data... | |
arm3.C | Loading commit data... | |
arm4.C | Loading commit data... | |
arm5.C | Loading commit data... | |
arm6.C | Loading commit data... | |
arm7.C | Loading commit data... | |
arm8.C | Loading commit data... | |
arm9.C | Loading commit data... | |
array1.C | Loading commit data... | |
array2.C | Loading commit data... | |
bad-error1.C | Loading commit data... | |
bad-error3.C | Loading commit data... | |
bad-error4.C | Loading commit data... | |
bad-error6.C | Loading commit data... | |
bad-error7.C | Loading commit data... | |
bit-fields1.C | Loading commit data... | |
bit-fields2.C | Loading commit data... | |
bit-fields3.C | Loading commit data... | |
builtin1.C | Loading commit data... | |
casts1.C | Loading commit data... | |
casts2.C | Loading commit data... | |
casts3.C | Loading commit data... | |
code-gen1.C | Loading commit data... | |
code-gen2.C | Loading commit data... | |
code-gen4.C | Loading commit data... | |
code-gen5.C | Loading commit data... | |
copy1.C | Loading commit data... | |
copy2.C | Loading commit data... | |
ctors1.C | Loading commit data... | |
ctors10.C | Loading commit data... | |
ctors11.C | Loading commit data... | |
ctors12.C | Loading commit data... | |
ctors13.C | Loading commit data... | |
ctors14.C | Loading commit data... | |
ctors15.C | Loading commit data... | |
ctors16.C | Loading commit data... | |
ctors17.C | Loading commit data... | |
ctors18.C | Loading commit data... | |
ctors19.C | Loading commit data... | |
ctors2.C | Loading commit data... | |
ctors20.C | Loading commit data... | |
ctors21.C | Loading commit data... | |
ctors3.C | Loading commit data... | |
ctors4.C | Loading commit data... | |
ctors5.C | Loading commit data... | |
ctors6.C | Loading commit data... | |
ctors7.C | Loading commit data... | |
ctors8.C | Loading commit data... | |
ctors9.C | Loading commit data... | |
cvt1.C | Loading commit data... | |
cvt10.C | Loading commit data... | |
cvt11.C | Loading commit data... | |
cvt12.C | Loading commit data... | |
cvt13.C | Loading commit data... | |
cvt14.C | Loading commit data... | |
cvt15.C | Loading commit data... | |
cvt16.C | Loading commit data... | |
cvt17.C | Loading commit data... | |
cvt18.C | Loading commit data... | |
cvt19.C | Loading commit data... | |
cvt2.C | Loading commit data... | |
cvt20.C | Loading commit data... | |
cvt21.C | Loading commit data... | |
cvt22.C | Loading commit data... | |
cvt23.C | Loading commit data... | |
cvt3.C | Loading commit data... | |
cvt4.C | Loading commit data... | |
cvt5.C | Loading commit data... | |
cvt6.C | Loading commit data... | |
cvt7.C | Loading commit data... | |
cvt8.C | Loading commit data... | |
cvt9.C | Loading commit data... | |
dossier1.C | Loading commit data... | |
dtors1.C | Loading commit data... | |
dtors2.C | Loading commit data... | |
dtors3.C | Loading commit data... | |
dtors4.C | Loading commit data... | |
dtors5.C | Loading commit data... | |
enum1.C | Loading commit data... | |
enum2.C | Loading commit data... | |
enum3.C | Loading commit data... | |
enum4.C | Loading commit data... | |
enum6.C | Loading commit data... | |
enum7.C | Loading commit data... | |
enum9.C | Loading commit data... | |
except1.C | Loading commit data... | |
except2.C | Loading commit data... | |
except3.C | Loading commit data... | |
except4.C | Loading commit data... | |
except5.C | Loading commit data... | |
except6.C | Loading commit data... | |
friend1.C | Loading commit data... | |
friend4.C | Loading commit data... | |
friend5.C | Loading commit data... | |
global-init1.C | Loading commit data... | |
incdec1.C | Loading commit data... | |
init1.C | Loading commit data... | |
init10.C | Loading commit data... | |
init11.C | Loading commit data... | |
init13.C | Loading commit data... | |
init14.C | Loading commit data... | |
init2.C | Loading commit data... | |
init3.C | Loading commit data... | |
init4.C | Loading commit data... | |
init5.C | Loading commit data... | |
init6.C | Loading commit data... | |
init7.C | Loading commit data... | |
init8.C | Loading commit data... | |
init9.C | Loading commit data... | |
inline4.C | Loading commit data... | |
inline6.C | Loading commit data... | |
inline7.C | Loading commit data... | |
mentor1.C | Loading commit data... | |
missed-error1.C | Loading commit data... | |
missed-error2.C | Loading commit data... | |
missed-error3.C | Loading commit data... | |
missing1.C | Loading commit data... | |
nest1.C | Loading commit data... | |
nest2.C | Loading commit data... | |
nest3.C | Loading commit data... | |
nest4.C | Loading commit data... | |
nest5.C | Loading commit data... | |
operators10.C | Loading commit data... | |
operators11.C | Loading commit data... | |
operators12.C | Loading commit data... | |
operators13.C | Loading commit data... | |
operators14.C | Loading commit data... | |
operators15.C | Loading commit data... | |
operators16.C | Loading commit data... | |
operators17.C | Loading commit data... | |
operators18.C | Loading commit data... | |
operators19.C | Loading commit data... | |
operators2.C | Loading commit data... | |
operators21.C | Loading commit data... | |
operators22.C | Loading commit data... | |
operators23.C | Loading commit data... | |
operators24.C | Loading commit data... | |
operators25.C | Loading commit data... | |
operators27.C | Loading commit data... | |
operators28.C | Loading commit data... | |
operators29.C | Loading commit data... | |
operators3.C | Loading commit data... | |
operators30.C | Loading commit data... | |
operators31.C | Loading commit data... | |
operators32.C | Loading commit data... | |
operators33.C | Loading commit data... | |
operators34.C | Loading commit data... | |
operators4.C | Loading commit data... | |
operators6.C | Loading commit data... | |
operators8.C | Loading commit data... | |
operators9.C | Loading commit data... | |
parsing1.C | Loading commit data... | |
parsing10.C | Loading commit data... | |
parsing2.C | Loading commit data... | |
parsing3.C | Loading commit data... | |
parsing4.C | Loading commit data... | |
parsing5.C | Loading commit data... | |
parsing6.C | Loading commit data... | |
parsing7.C | Loading commit data... | |
parsing8.C | Loading commit data... | |
parsing9.C | Loading commit data... | |
patches1.C | Loading commit data... | |
pic1.C | Loading commit data... | |
pr25000.C | Loading commit data... | |
profile1.C | Loading commit data... | |
refs1.C | Loading commit data... | |
refs2.C | Loading commit data... | |
refs3.C | Loading commit data... | |
refs4.C | Loading commit data... | |
scope1.C | Loading commit data... | |
scope2.C | Loading commit data... | |
scope3.C | Loading commit data... | |
scope4.C | Loading commit data... | |
scope5.C | Loading commit data... | |
shadow1.C | Loading commit data... | |
shadow2.C | Loading commit data... | |
static-mem2.C | Loading commit data... | |
static-mem3.C | Loading commit data... | |
static-mem4.C | Loading commit data... | |
static-mem5.C | Loading commit data... | |
template1.C | Loading commit data... | |
template3.C | Loading commit data... | |
temps1.C | Loading commit data... | |
temps2.C | Loading commit data... | |
temps3.C | Loading commit data... | |
temps4.C | Loading commit data... | |
temps5.C | Loading commit data... | |
temps6.C | Loading commit data... | |
temps7.C | Loading commit data... | |
typeck1.C | Loading commit data... | |
typeck2.C | Loading commit data... | |
typeck3.C | Loading commit data... | |
typeck4.C | Loading commit data... | |
union1.C | Loading commit data... | |
union2.C | Loading commit data... | |
union3.C | Loading commit data... | |
union4.C | Loading commit data... | |
unsorted1.C | Loading commit data... | |
unsorted2.C | Loading commit data... | |
vbase1.C | Loading commit data... | |
virtual1.C | Loading commit data... | |
virtual2.C | Loading commit data... | |
virtual3.C | Loading commit data... | |
virtual4.C | Loading commit data... | |
visibility1.C | Loading commit data... | |
visibility10.C | Loading commit data... | |
visibility11.C | Loading commit data... | |
visibility12.C | Loading commit data... | |
visibility13.C | Loading commit data... | |
visibility14.C | Loading commit data... | |
visibility15.C | Loading commit data... | |
visibility16.C | Loading commit data... | |
visibility17.C | Loading commit data... | |
visibility18.C | Loading commit data... | |
visibility19.C | Loading commit data... | |
visibility2.C | Loading commit data... | |
visibility20.C | Loading commit data... | |
visibility21.C | Loading commit data... | |
visibility22.C | Loading commit data... | |
visibility24.C | Loading commit data... | |
visibility25.C | Loading commit data... | |
visibility26.C | Loading commit data... | |
visibility27.C | Loading commit data... | |
visibility28.C | Loading commit data... | |
visibility3.C | Loading commit data... | |
visibility4.C | Loading commit data... | |
visibility5.C | Loading commit data... | |
visibility6.C | Loading commit data... | |
visibility7.C | Loading commit data... | |
visibility8.C | Loading commit data... | |
visibility9.C | Loading commit data... | |
vtable1.C | Loading commit data... | |
vtable2.C | Loading commit data... | |
vtable3.C | Loading commit data... | |
weak.C | Loading commit data... |