Tested x86_64-pc-linux-gnu, applying to trunk. -- 8< --
In modules we can get an OVERLOAD around a non-function, so let's tail recurse instead of falling through. As a result we start printing the template header in this testcase. gcc/cp/ChangeLog: * error.cc (dump_decl) [OVERLOAD]: Recurse on single case. gcc/testsuite/ChangeLog: * g++.dg/warn/pr61945.C: Adjust diagnostic. --- gcc/cp/error.cc | 6 ++---- gcc/testsuite/g++.dg/warn/pr61945.C | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/gcc/cp/error.cc b/gcc/cp/error.cc index 171a352c85f..1f36563ae2c 100644 --- a/gcc/cp/error.cc +++ b/gcc/cp/error.cc @@ -1407,10 +1407,8 @@ dump_decl (cxx_pretty_printer *pp, tree t, int flags) break; } - /* If there's only one function, just treat it like an ordinary - FUNCTION_DECL. */ - t = OVL_FIRST (t); - /* Fall through. */ + /* If there's only one function, dump that. */ + return dump_decl (pp, OVL_FIRST (t), flags); case FUNCTION_DECL: if (! DECL_LANG_SPECIFIC (t)) diff --git a/gcc/testsuite/g++.dg/warn/pr61945.C b/gcc/testsuite/g++.dg/warn/pr61945.C index 3d40581e5e3..2252330835f 100644 --- a/gcc/testsuite/g++.dg/warn/pr61945.C +++ b/gcc/testsuite/g++.dg/warn/pr61945.C @@ -7,5 +7,5 @@ class A { }; class B : A { template <typename> - void foo (); // { dg-message "by .B::foo\\(\\)." } + void foo (); // { dg-message "by .*B::foo\\(\\)." } }; base-commit: 03a810da10d8dfb5aec9261372cad7bf090e6986 prerequisite-patch-id: bc2e5a849f285a95d7446f7675a79a4a6733df14 -- 2.45.2