mangle.c (mangle_decl_string): Mangle the names of overloaded operators, even when they have `extern "C"' linkage.

* mangle.c (mangle_decl_string): Mangle the names of overloaded
	operators, even when they have `extern "C"' linkage.

From-SVN: r40690
This commit is contained in:
Mark Mitchell 2001-03-21 17:19:54 +00:00 committed by Mark Mitchell
parent 7dd4b4a326
commit 1c06710a55
3 changed files with 31 additions and 0 deletions

View File

@ -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,

View File

@ -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. */

View File

@ -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();
}