summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-21 17:19:54 +0000
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>2001-03-21 17:19:54 +0000
commitd57740e43ca7d770a8d3f89ffb3a4a45fe0a378e (patch)
treefacf5eb0702e97c6c0b246b6097b5bd834a2a0da
parented591655824a1977f7c52344158613d03b96480c (diff)
downloadppe42-gcc-d57740e43ca7d770a8d3f89ffb3a4a45fe0a378e.tar.gz
ppe42-gcc-d57740e43ca7d770a8d3f89ffb3a4a45fe0a378e.zip
* mangle.c (mangle_decl_string): Mangle the names of overloaded
operators, even when they have `extern "C"' linkage. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@40690 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/mangle.c2
-rw-r--r--gcc/testsuite/g++.old-deja/g++.other/mangle2.C24
3 files changed, 31 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 15ff7b546bb..3488b1149ef 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,8 @@
+2001-03-21 Mark Mitchell <mark@codesourcery.com>
+
+ * mangle.c (mangle_decl_string): Mangle the names of overloaded
+ operators, even when they have `extern "C"' linkage.
+
2001-03-19 Mark Mitchell <mark@codesourcery.com>
* class.c (get_vtable_decl): Use SET_DECL_ASSEMBLER_NAME,
diff --git a/gcc/cp/mangle.c b/gcc/cp/mangle.c
index 4d63f768b35..101f4123852 100644
--- a/gcc/cp/mangle.c
+++ b/gcc/cp/mangle.c
@@ -2071,6 +2071,8 @@ mangle_decl_string (decl)
write_type (TREE_TYPE (decl));
else if (/* The names of `extern "C"' functions are not mangled. */
(TREE_CODE (decl) == FUNCTION_DECL
+ /* But overloaded operator names *are* mangled. */
+ && !DECL_OVERLOADED_OPERATOR_P (decl)
/* If there's no DECL_LANG_SPECIFIC, it's a function built
by language-independent code, which never builds
functions with C++ linkage. */
diff --git a/gcc/testsuite/g++.old-deja/g++.other/mangle2.C b/gcc/testsuite/g++.old-deja/g++.other/mangle2.C
new file mode 100644
index 00000000000..25bab87a249
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.other/mangle2.C
@@ -0,0 +1,24 @@
+// Test for overloaded operators in "C" linkage
+// Build don't link:
+
+extern "C" {
+typedef struct b
+{
+ int a;
+} c;
+
+extern const c z;
+
+inline bool operator!=(const c& x, const c& y)
+{
+ return x.a != y.a;
+}
+};
+
+void foo();
+
+void bar(c x)
+{
+ if (x != z)
+ foo();
+}
OpenPOWER on IntegriCloud