From cb406914ff01074b3a859dedf0aeb4cd07edd93e Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Mon, 6 Feb 2012 14:52:43 -0500 Subject: [PATCH] re PR c++/52088 (ICE in "delete" with template convertion operator) PR c++/52088 * cvt.c (build_expr_type_conversion): Check for template conversion. From-SVN: r183940 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/cvt.c | 11 +++++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/template/conv13.C | 13 +++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/conv13.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8938ee22cb8..6cc27423613 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-02-06 Jason Merrill + + PR c++/52088 + * cvt.c (build_expr_type_conversion): Check for template conversion. + 2012-01-31 Jason Merrill PR c++/52043 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 8570e3d4502..c411a47f0a8 100644 --- a/gcc/cp/cvt.c +++ b/gcc/cp/cvt.c @@ -1539,6 +1539,17 @@ build_expr_type_conversion (int desires, tree expr, bool complain) if (DECL_NONCONVERTING_P (cand)) continue; + if (TREE_CODE (cand) == TEMPLATE_DECL) + { + if (complain) + { + error ("ambiguous default type conversion from %qT", + basetype); + error (" candidate conversions include %qD", cand); + } + return error_mark_node; + } + candidate = non_reference (TREE_TYPE (TREE_TYPE (cand))); switch (TREE_CODE (candidate)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 305a6894795..186c5c9562e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-06 Jason Merrill + + PR c++/52088 + * g++.dg/template/conv13.C: New. + 2012-02-06 Richard Guenther PR tree-optimization/52115 diff --git a/gcc/testsuite/g++.dg/template/conv13.C b/gcc/testsuite/g++.dg/template/conv13.C new file mode 100644 index 00000000000..717994bf6db --- /dev/null +++ b/gcc/testsuite/g++.dg/template/conv13.C @@ -0,0 +1,13 @@ +// PR c++/52088 + +struct S +{ + template + operator T *() { return 0; } +}; + +int main() +{ + S s; + delete s; // { dg-error "ambiguous|template|pointer" } +} -- 2.30.2