+2000-01-31 Jason Merrill <jason@casey.cygnus.com>
+
+ * tinfo.h (old abi): #include "tconfig.h".
+ * tinfo.cc (convert_to_base): Move into old abi section.
+
2000-01-31 Mark Mitchell <mark@codesourcery.com>
* cp-tree.h (BINFO_VIRTUALS): Tweak documentation.
#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;
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
// 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
// -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