From d29760adf92616716f04f958eacb9cceae2a0acf Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 17 Feb 2010 17:51:25 -0500 Subject: [PATCH] re PR c++/43079 (ICE with incompatible pointer-to-member-function as template parameter) PR c++/43079 * pt.c (convert_nontype_argument): Change assert to test. From-SVN: r156839 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 7 ++++--- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/ptrmem20.C | 16 ++++++++++++++++ 4 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 gcc/testsuite/g++.dg/template/ptrmem20.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4a7b125..40d7334 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-02-17 Jason Merrill + + PR c++/43079 + * pt.c (convert_nontype_argument): Change assert to test. + 2010-02-16 Jason Merrill * cp-gimplify.c (cp_gimplify_expr): Fix error recovery. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 43cd105..0165a7d 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5128,12 +5128,13 @@ convert_nontype_argument (tree type, tree expr) provide a superior diagnostic. */ if (!same_type_p (TREE_TYPE (expr), type)) { - /* Make sure we are just one standard conversion off. */ - gcc_assert (can_convert (type, TREE_TYPE (expr))); error ("%qE is not a valid template argument for type %qT " "because it is of type %qT", expr, type, TREE_TYPE (expr)); - inform (input_location, "standard conversions are not allowed in this context"); + /* If we are just one standard conversion off, explain. */ + if (can_convert (type, TREE_TYPE (expr))) + inform (input_location, + "standard conversions are not allowed in this context"); return NULL_TREE; } } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e03a469..87e442e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-02-17 Jason Merrill + + PR c++/43079 + * g++.dg/template/ptrmem20.C: New. + 2010-02-17 Uros Bizjak PR target/43103 diff --git a/gcc/testsuite/g++.dg/template/ptrmem20.C b/gcc/testsuite/g++.dg/template/ptrmem20.C new file mode 100644 index 0000000..d98ef39 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/ptrmem20.C @@ -0,0 +1,16 @@ +// PR c++/43079 + +struct A {}; + +struct B +{ + void foo() const; + void foo(); +}; + +template void bar(); + +void baz() +{ + bar<&B::foo>(); // { dg-error "not a valid template argument|no match" } +} -- 2.7.4