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:
parent
7dd4b4a326
commit
1c06710a55
@ -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>
|
2001-03-19 Mark Mitchell <mark@codesourcery.com>
|
||||||
|
|
||||||
* class.c (get_vtable_decl): Use SET_DECL_ASSEMBLER_NAME,
|
* class.c (get_vtable_decl): Use SET_DECL_ASSEMBLER_NAME,
|
||||||
|
@ -2071,6 +2071,8 @@ mangle_decl_string (decl)
|
|||||||
write_type (TREE_TYPE (decl));
|
write_type (TREE_TYPE (decl));
|
||||||
else if (/* The names of `extern "C"' functions are not mangled. */
|
else if (/* The names of `extern "C"' functions are not mangled. */
|
||||||
(TREE_CODE (decl) == FUNCTION_DECL
|
(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
|
/* If there's no DECL_LANG_SPECIFIC, it's a function built
|
||||||
by language-independent code, which never builds
|
by language-independent code, which never builds
|
||||||
functions with C++ linkage. */
|
functions with C++ linkage. */
|
||||||
|
24
gcc/testsuite/g++.old-deja/g++.other/mangle2.C
Normal file
24
gcc/testsuite/g++.old-deja/g++.other/mangle2.C
Normal 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();
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user