From a2e175cf36c260eeb422d97c6603907501056e43 Mon Sep 17 00:00:00 2001 From: David Malcolm Date: Wed, 27 Jan 2016 17:16:36 -0500 Subject: [PATCH] PR c++/22238 (has not been bootstrapped or regrtested) gcc/cp/ChangeLog: PR c++/22238 * call.c (perform_implicit_conversion_flags): Rewrite error_at to eliminate usage of %qE. gcc/testsuite/ChangeLog: PR c++/22238 * g++.dg/warn/pr22238-1.C: New test. --- gcc/cp/call.c | 5 +++-- gcc/testsuite/g++.dg/warn/pr22238-1.C | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/warn/pr22238-1.C diff --git a/gcc/cp/call.c b/gcc/cp/call.c index ce87be7..4d28779 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -9614,8 +9614,9 @@ perform_implicit_conversion_flags (tree type, tree expr, else if (invalid_nonstatic_memfn_p (loc, expr, complain)) /* We gave an error. */; else - error_at (loc, "could not convert %qE from %qT to %qT", expr, - TREE_TYPE (expr), type); + error_at + (loc, "value of type %qT is not contextually convertible to %qT", + TREE_TYPE (expr), type); } expr = error_mark_node; } diff --git a/gcc/testsuite/g++.dg/warn/pr22238-1.C b/gcc/testsuite/g++.dg/warn/pr22238-1.C new file mode 100644 index 0000000..3b4759b --- /dev/null +++ b/gcc/testsuite/g++.dg/warn/pr22238-1.C @@ -0,0 +1,17 @@ +// { dg-options "-fdiagnostics-show-caret" } + +struct A +{ + void foo(); +}; + +struct B : virtual A +{ + void bar() { if (foo ()) ; } // { dg-error "value of type .void. is not contextually convertible to .bool." } +}; + +/* { dg-begin-multiline-output "" } + void bar() { if (foo ()) ; } + ~~~~^~ + { dg-end-multiline-output "" } */ + -- 1.8.5.3