From 144e414d26bf3d2daff9456456cfd9abeb5cfcda Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Fri, 16 Jan 2004 18:39:58 +0000 Subject: [PATCH] re PR c++/13178 (Bogus C++ error message referring to operator 1) PR c++/13178 * call.c (name_as_c_string): Print conversion operator names correctly. PR c++/13178 * g++.dg/conversion/op1.C: New test. From-SVN: r75986 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/call.c | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/conversion/op1.C | 10 ++++++++++ 4 files changed, 28 insertions(+) create mode 100644 gcc/testsuite/g++.dg/conversion/op1.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c2458abfe86..06733cc329d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2004-01-16 Mark Mitchell + PR c++/13178 + * call.c (name_as_c_string): Print conversion operator names + correctly. + PR c++/13478 * call.c (initialize_reference): Pass -1 for inner parameter to convert_like_real. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index aaf902ceed6..7864d088206 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -4986,6 +4986,15 @@ name_as_c_string (tree name, tree type, bool *free_p) *free_p = true; } } + else if (IDENTIFIER_TYPENAME_P (name)) + { + pretty_name = concat ("operator ", + type_as_string (TREE_TYPE (name), + TFF_PLAIN_IDENTIFIER), + NULL); + /* Remember that we need to free the memory allocated. */ + *free_p = true; + } else pretty_name = (char *) IDENTIFIER_POINTER (name); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b5d83dcd90e..573156e2701 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-01-16 Mark Mitchell + + PR c++/13178 + * g++.dg/conversion/op1.C: New test. + 2004-01-16 J"orn Rennecke PR 10392 diff --git a/gcc/testsuite/g++.dg/conversion/op1.C b/gcc/testsuite/g++.dg/conversion/op1.C new file mode 100644 index 00000000000..3aa21c7780e --- /dev/null +++ b/gcc/testsuite/g++.dg/conversion/op1.C @@ -0,0 +1,10 @@ +class C +{ + template + operator U(); +}; + +int fn (C c) +{ + return C::operator float(c); // { dg-error "operator U" } +}