* config/arm/bpabi.h (TARGET_BPABI_CPP_BUILTINS): Define.
(TARGET_OS_CPP_BUILTINS): Likewise.
* config/arm/symbian.h (TARGET_OS_CPP_BUILTINS): Include
TARGET_BPABI_CPP_BUILTINS.
* g++.dg/abi/arm_rtti1.C: New test.
* libsupc++/typeinfo: Honor __GXX_MERGED_TYPEINFO_NAMES if already
defined.
[[Split portion of a mixed commit.]]
From-SVN: r87018.2
+2004-09-02 Mark Mitchell <mark@codesourcery.com>
+
+ * config/arm/bpabi.h (TARGET_BPABI_CPP_BUILTINS): Define.
+ (TARGET_OS_CPP_BUILTINS): Likewise.
+ * config/arm/symbian.h (TARGET_OS_CPP_BUILTINS): Include
+ TARGET_BPABI_CPP_BUILTINS.
+
2004-09-02 Roman Zippel <zippel@linux-m68k.org>
* combine.c (distribute_notes): Don't add REG_LABEL to jump insn.
#define DECLARE_LIBRARY_RENAMES RENAME_LIBRARY (floatdisf, l2f)
#endif
+/* The BPABI requires that we always use an out-of-line implementation
+ of RTTI comparison, even if the target supports weak symbols,
+ because the same object file might be used on a target that does
+ not support merging symbols across DLL boundaries. This macro is
+ broken out separately so that it can be used within
+ TARGET_OS_CPP_BUILTINS in configuration files for systems based on
+ the BPABI. */
+#define TARGET_BPABI_CPP_BUILTINS() \
+ do \
+ { \
+ builtin_define ("__GXX_MERGED_TYPEINFO_NAMES=0"); \
+ } \
+ while (false)
+
+#define TARGET_OS_CPP_BUILTINS() \
+ TARGET_BPABI_CPP_BUILTINS()
#define RENAME_LIBRARY(GCC_NAME, AEABI_NAME) /* empty */
/* Define the __symbian__ macro. */
+#undef TARGET_OS_CPP_BUILTINS
#define TARGET_OS_CPP_BUILTINS() \
- do \
+ do \
{ \
+ /* Include the default BPABI stuff. */ \
+ TARGET_BPABI_CPP_BUILTINS (); \
builtin_define ("__symbian__"); \
- } \
+ } \
while (false)
+2004-09-02 Mark Mitchell <mark@codesourcery.com>
+
+ * g++.dg/abi/arm_rtti1.C: New test.
+
2004-09-02 Geoffrey Keating <geoffk@apple.com>
* gcc.dg/ppc-vector-memcpy.c: New.
--- /dev/null
+// { dg-do compile { target arm*-*-eabi* arm*-*-symbianelf* } }
+// { dg-options "-O2" }
+// Check that, even when optimizing, we emit an out-of-line call to
+// the type-info comparison function.
+// { dg-final { scan-assembler _ZNKSt9type_infoeqERKS_ } }
+
+#include <typeinfo>
+
+extern const std::type_info& t1;
+extern const std::type_info& t2;
+
+bool f() {
+ return t1 == t2;
+}
+2004-09-02 Mark Mitchell <mark@codesourcery.com>
+
+ * libsupc++/typeinfo: Honor __GXX_MERGED_TYPEINFO_NAMES if already
+ defined.
+
2004-09-02 Benjamin Kosnik <bkoz@redhat.com>
Simon Richter <Simon.Richter@hogyros.de>
class __class_type_info;
} // namespace __cxxabiv1
-#if !__GXX_WEAK__
- // If weak symbols are not supported, typeinfo names are not merged.
- #define __GXX_MERGED_TYPEINFO_NAMES 0
-#else
- // On platforms that support weak symbols, typeinfo names are merged.
- #define __GXX_MERGED_TYPEINFO_NAMES 1
+#ifndef __GXX_MERGED_TYPEINFO_NAMES
+ #if !__GXX_WEAK__
+ // If weak symbols are not supported, typeinfo names are not merged.
+ #define __GXX_MERGED_TYPEINFO_NAMES 0
+ #else
+ // On platforms that support weak symbols, typeinfo names are merged.
+ #define __GXX_MERGED_TYPEINFO_NAMES 1
+ #endif
#endif
namespace std