From 9b379e46d52a4abd030dc2d6b745b36e9a5b2913 Mon Sep 17 00:00:00 2001
From: nathan <nathan@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Sat, 6 May 2000 15:52:11 +0000
Subject: [PATCH] 	* rtti.c (ptmd_initializer): Set non-public, if class
 is 	incomplete.

	* inc/cxxabi.h (__dynamic_cast): Explicitly say extern "C++".
	(__cxa_vec_new, __cxa_vec_ctor, __cxa_vec_dtor,
	__cxa_vec_delete): Likewise.
	* tinfo.cc (__dynamic_cast): Likewise.
	* vec.cc (__cxa_vec_new, __cxa_vec_ctor, __cxa_vec_dtor,
	__cxa_vec_delete): Likewise.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@33726 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/cp/ChangeLog    | 12 ++++++++++++
 gcc/cp/inc/cxxabi.h |  5 +++++
 gcc/cp/rtti.c       |  5 ++++-
 gcc/cp/tinfo.cc     |  2 +-
 gcc/cp/vec.cc       |  8 ++++----
 5 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 636f30ec9379..fd182b6c1520 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,15 @@
+2000-05-06  Nathan Sidwell  <nathan@codesourcery.com>
+
+	* rtti.c (ptmd_initializer): Set non-public, if class is
+	incomplete.
+	
+	* inc/cxxabi.h (__dynamic_cast): Explicitly say extern "C++".
+	(__cxa_vec_new, __cxa_vec_ctor, __cxa_vec_dtor,
+	__cxa_vec_delete): Likewise.
+	* tinfo.cc (__dynamic_cast): Likewise.
+	* vec.cc (__cxa_vec_new, __cxa_vec_ctor, __cxa_vec_dtor,
+	__cxa_vec_delete): Likewise.
+
 2000-05-04  Mark Mitchell  <mark@codesourcery.com>
 
 	* cp-tree.h (DELTA_FROM_VTABLE_ENTRY): Remove.
diff --git a/gcc/cp/inc/cxxabi.h b/gcc/cp/inc/cxxabi.h
index b85624085e67..959d23fae81d 100644
--- a/gcc/cp/inc/cxxabi.h
+++ b/gcc/cp/inc/cxxabi.h
@@ -394,6 +394,7 @@ protected:
 };
 
 /* dynamic cast runtime */
+extern "C++"
 void *__dynamic_cast (const void *__src_ptr,    /* object started from */
                       const __class_type_info *__src_type, /* static type of object */
                       const __class_type_info *__dst_type, /* desired target type */
@@ -409,6 +410,7 @@ void *__dynamic_cast (const void *__src_ptr,    /* object started from */
 /* array ctor/dtor routines */
 
 /* allocate and construct array */
+extern "C++"
 void *__cxa_vec_new (size_t __element_count,
                      size_t __element_size,
                      size_t __padding_size,
@@ -416,6 +418,7 @@ void *__cxa_vec_new (size_t __element_count,
                      void (*__destructor) (void *));
 
 /* construct array */
+extern "C++"
 void __cxa_vec_ctor (void *__array_address,
                      size_t __element_count,
                      size_t __element_size,
@@ -423,12 +426,14 @@ void __cxa_vec_ctor (void *__array_address,
                      void (*__destructor) (void *));
 
 /* destruct array */
+extern "C++"
 void __cxa_vec_dtor (void *__array_address,
                      size_t __element_count,
                      size_t __element_size,
                      void (*__destructor) (void *));
 
 /* destruct and release array */
+extern "C++"
 void __cxa_vec_delete (void *__array_address,
                        size_t __element_size,
                        size_t __padding_size,
diff --git a/gcc/cp/rtti.c b/gcc/cp/rtti.c
index b16faf7358e5..426c5c3eedfd 100644
--- a/gcc/cp/rtti.c
+++ b/gcc/cp/rtti.c
@@ -1440,7 +1440,10 @@ ptmd_initializer (desc, target, non_public_ptr)
       *non_public_ptr = 1;
     }
   if (!COMPLETE_TYPE_P (klass))
-    flags |= 0x10;
+    {
+      flags |= 0x10;
+      *non_public_ptr = 1;
+    }
   init = tree_cons (NULL_TREE, build_int_2 (flags, 0), init);
   init = tree_cons (NULL_TREE,
                     build_unary_op (ADDR_EXPR,
diff --git a/gcc/cp/tinfo.cc b/gcc/cp/tinfo.cc
index a710aab40b5b..ec2d26209d09 100644
--- a/gcc/cp/tinfo.cc
+++ b/gcc/cp/tinfo.cc
@@ -1137,7 +1137,7 @@ __do_upcast (__sub_kind access_path,
 }
 
 // this is the external interface to the dynamic cast machinery
-void *
+extern "C++" void *
 __dynamic_cast (const void *src_ptr,    // object started from
                 const __class_type_info *src_type, // type of the starting object
                 const __class_type_info *dst_type, // desired target type
diff --git a/gcc/cp/vec.cc b/gcc/cp/vec.cc
index 23aef76da0e9..e88e48dbcd20 100644
--- a/gcc/cp/vec.cc
+++ b/gcc/cp/vec.cc
@@ -40,7 +40,7 @@ namespace __cxxabiv1
 {
 
 /* allocate and construct array */
-void *
+extern "C++" void *
 __cxa_vec_new (size_t element_count,
                size_t element_size,
                size_t padding_size,
@@ -70,7 +70,7 @@ __cxa_vec_new (size_t element_count,
 }
 
 /* construct array */
-void
+extern "C++" void
 __cxa_vec_ctor (void *array_address,
                 size_t element_count,
                 size_t element_size,
@@ -95,7 +95,7 @@ __cxa_vec_ctor (void *array_address,
 }
 
 /* destruct array */
-void
+extern "C++" void
 __cxa_vec_dtor (void *array_address,
                 size_t element_count,
                 size_t element_size,
@@ -131,7 +131,7 @@ __cxa_vec_dtor (void *array_address,
 }
 
 /* destruct and release array */
-void
+extern "C++" void
 __cxa_vec_delete (void *array_address,
                   size_t element_size,
                   size_t padding_size,
-- 
GitLab