diff options
author | Jason Merrill <jason@redhat.com> | 2012-02-06 14:52:43 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-02-06 14:52:43 -0500 |
commit | cb406914ff01074b3a859dedf0aeb4cd07edd93e (patch) | |
tree | b1451915bb22ef544efe21574e84ab2008be819c | |
parent | 973a39ae60e4589489891b88b49fb15f4fa7c5d0 (diff) | |
download | gcc-cb406914ff01074b3a859dedf0aeb4cd07edd93e.zip gcc-cb406914ff01074b3a859dedf0aeb4cd07edd93e.tar.gz gcc-cb406914ff01074b3a859dedf0aeb4cd07edd93e.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/cvt.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/conv13.C | 13 |
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8938ee2..6cc2742 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2012-02-06 Jason Merrill <jason@redhat.com> + + PR c++/52088 + * cvt.c (build_expr_type_conversion): Check for template conversion. + 2012-01-31 Jason Merrill <jason@redhat.com> PR c++/52043 diff --git a/gcc/cp/cvt.c b/gcc/cp/cvt.c index 8570e3d..c411a47 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 305a689..186c5c9 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-02-06 Jason Merrill <jason@redhat.com> + + PR c++/52088 + * g++.dg/template/conv13.C: New. + 2012-02-06 Richard Guenther <rguenther@suse.de> 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 0000000..717994b --- /dev/null +++ b/gcc/testsuite/g++.dg/template/conv13.C @@ -0,0 +1,13 @@ +// PR c++/52088 + +struct S +{ + template <typename T> + operator T *() { return 0; } +}; + +int main() +{ + S s; + delete s; // { dg-error "ambiguous|template|pointer" } +} |