From 7033073fad90476ab0c4e9e5da0952a2005f3857 Mon Sep 17 00:00:00 2001 From: jason Date: Mon, 31 Jan 2000 21:27:42 +0000 Subject: [PATCH] * tinfo.h (old abi): #include "tconfig.h". * tinfo.cc (convert_to_base): Move into old abi section. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@31725 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/tinfo.cc | 32 ++++++++++++-------------------- gcc/cp/tinfo.h | 4 +++- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 50848be..98e2b2f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2000-01-31 Jason Merrill + + * tinfo.h (old abi): #include "tconfig.h". + * tinfo.cc (convert_to_base): Move into old abi section. + 2000-01-31 Mark Mitchell * cp-tree.h (BINFO_VIRTUALS): Tweak documentation. diff --git a/gcc/cp/tinfo.cc b/gcc/cp/tinfo.cc index 557c88c..20e6c9e 100644 --- a/gcc/cp/tinfo.cc +++ b/gcc/cp/tinfo.cc @@ -31,12 +31,23 @@ #include "tinfo.h" #include "new" // for placement new +// This file contains the minimal working set necessary to link with code +// that uses virtual functions and -frtti but does not actually use RTTI +// functionality. + +std::type_info:: +~type_info () +{ } + +#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100 +// original (old) abi + namespace { // ADDR is a pointer to an object. Convert it to a pointer to a base, // using OFFSET. inline void* -convert_to_base (void *addr, bool is_virtual, USItype offset) +convert_to_base (void *addr, bool is_virtual, myint32 offset) { if (!addr) return NULL; @@ -44,32 +55,13 @@ convert_to_base (void *addr, bool is_virtual, USItype offset) if (!is_virtual) return (char *) addr + offset; -#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 - // Under the new ABI, the offset gives us an index into the vtable, - // which contains an offset to the virtual base. The vptr is always - // the first thing in the object. - std::ptrdiff_t *vtable = *((std::ptrdiff_t **) addr); - return ((char *) addr) + vtable[offset]; -#else // Under the old ABI, the offset gives us the address of a pointer // to the virtual base. return *((void **) ((char *) addr + offset)); -#endif } } -// This file contains the minimal working set necessary to link with code -// that uses virtual functions and -frtti but does not actually use RTTI -// functionality. - -std::type_info:: -~type_info () -{ } - -#if !defined(__GXX_ABI_VERSION) || __GXX_ABI_VERSION < 100 -// original (old) abi - // We can't rely on common symbols being shared between shared objects. bool std::type_info:: operator== (const std::type_info& arg) const diff --git a/gcc/cp/tinfo.h b/gcc/cp/tinfo.h index 4753e71..3df662d 100644 --- a/gcc/cp/tinfo.h +++ b/gcc/cp/tinfo.h @@ -171,6 +171,8 @@ public: // type_info for a general class. // Kludge, kludge, kludge. +#include "tconfig.h" + #if BITS_PER_UNIT == 8 typedef int myint32 __attribute__ ((mode (SI))); #elif BITS_PER_UNIT == 16 @@ -428,6 +430,6 @@ void *__dynamic_cast (const void *src_ptr, // object started from // -2: src_type is not a public base of dst_type // -3: src_type is a multiple public non-virtual base of dst_type -}; // namespace std +} // namespace std #endif -- 2.7.4