Fix bug in C++ overload resolution
authorTom Tromey <tromey@adacore.com>
Fri, 18 Feb 2022 21:03:03 +0000 (14:03 -0700)
committerTom Tromey <tromey@adacore.com>
Wed, 23 Feb 2022 20:18:04 +0000 (13:18 -0700)
commitac03c8d8fd6cf7f9080068589683cb06531879c2
treeda33dc0c2f1158f9d28dacf2ffb8c6ba47624747
parent29ef4c0699e1b46d41ade00ae07a54f979ea21cc
Fix bug in C++ overload resolution

PR c++/28901 points out a bug in C++ overload resolution.  When
comparing two overloads, one might be better than the other for
certain parameters -- but, if that one also has some invalid
conversion, then it should never be considered the better choice.
Instead, a valid-but-not-apparently-quite-as-good overload should be
preferred.

This patch fixes this problem by changing how overload comparisons are
done.  I don't believe it should affect any currently valid overload
resolution; nor should it affect resolutions where all the choices are
equally invalid.
gdb/gdbtypes.c
gdb/testsuite/gdb.cp/overload.cc
gdb/testsuite/gdb.cp/overload.exp