diff options
| author | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-03-21 17:19:54 +0000 |
|---|---|---|
| committer | mmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4> | 2001-03-21 17:19:54 +0000 |
| commit | d57740e43ca7d770a8d3f89ffb3a4a45fe0a378e (patch) | |
| tree | facf5eb0702e97c6c0b246b6097b5bd834a2a0da | |
| parent | ed591655824a1977f7c52344158613d03b96480c (diff) | |
| download | ppe42-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/ChangeLog | 5 | ||||
| -rw-r--r-- | gcc/cp/mangle.c | 2 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.other/mangle2.C | 24 |
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(); +} |

