* config/arm/bpabi.h (TARGET_BPABI_CPP_BUILTINS): Define.
authormmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 00:43:59 +0000 (00:43 +0000)
committermmitchel <mmitchel@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 3 Sep 2004 00:43:59 +0000 (00:43 +0000)
(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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@87018 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/arm/bpabi.h
gcc/config/arm/symbian.h
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/abi/arm_rtti1.C [new file with mode: 0644]
libstdc++-v3/ChangeLog
libstdc++-v3/libsupc++/typeinfo

index 758a33a..96eb1b8 100644 (file)
@@ -1,3 +1,10 @@
+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.
index 60d6e75..e2be114 100644 (file)
 #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()
index 5a59e79..a900d76 100644 (file)
 #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)
index df9b806..428480c 100644 (file)
@@ -1,3 +1,7 @@
+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.
diff --git a/gcc/testsuite/g++.dg/abi/arm_rtti1.C b/gcc/testsuite/g++.dg/abi/arm_rtti1.C
new file mode 100644 (file)
index 0000000..a481bdd
--- /dev/null
@@ -0,0 +1,14 @@
+// { 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;
+}
index 0f4816b..1cdfef6 100644 (file)
@@ -1,3 +1,8 @@
+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>
        
index 46803ad..8182422 100644 (file)
@@ -46,12 +46,14 @@ namespace __cxxabiv1
   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