]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR c++/13178 (Bogus C++ error message referring to operator 1)
authorMark Mitchell <mark@codesourcery.com>
Fri, 16 Jan 2004 18:39:58 +0000 (18:39 +0000)
committerMark Mitchell <mmitchel@gcc.gnu.org>
Fri, 16 Jan 2004 18:39:58 +0000 (18:39 +0000)
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
gcc/cp/call.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/conversion/op1.C [new file with mode: 0644]

index c2458abfe86d020353e1f218dc4463ae9db9b1a1..06733cc329dff00ae4ba6105653bf7529e1e28fa 100644 (file)
@@ -1,5 +1,9 @@
 2004-01-16  Mark Mitchell  <mark@codesourcery.com>
 
+       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.
index aaf902ceed63ff8422624f595b831cfe9dbdd703..7864d08820677d8f2d4055e4c1c0aa3687d4c969 100644 (file)
@@ -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);
 
index b5d83dcd90efcc66d299ba65f1d22650b90c8748..573156e27017786b8bc93864911c88165462462b 100644 (file)
@@ -1,3 +1,8 @@
+2004-01-16  Mark Mitchell  <mark@codesourcery.com>
+
+       PR c++/13178
+       * g++.dg/conversion/op1.C: New test.
+
 2004-01-16  J"orn Rennecke <joern.rennecke@superh.com>
 
        PR 10392
diff --git a/gcc/testsuite/g++.dg/conversion/op1.C b/gcc/testsuite/g++.dg/conversion/op1.C
new file mode 100644 (file)
index 0000000..3aa21c7
--- /dev/null
@@ -0,0 +1,10 @@
+class C
+{
+  template<typename U> 
+  operator U();
+};
+
+int fn (C c) 
+{ 
+  return C::operator float(c); // { dg-error "operator U" }
+}