[libcxx] r192074 - Eliminate more symbols multiply defined between libsupc++ and libc++.

Peter Collingbourne peter at pcc.me.uk
Sun Oct 6 15:13:16 PDT 2013


Author: pcc
Date: Sun Oct  6 17:13:16 2013
New Revision: 192074

URL: http://llvm.org/viewvc/llvm-project?rev=192074&view=rev
Log:
Eliminate more symbols multiply defined between libsupc++ and libc++.

The remaining multiple definitions were flushed out by attempting to
link libsupc++ and libc++ into the same executable with --whole-archive,
e.g.

clang++ -I../llvm/projects/libcxx/include -nodefaultlibs -Wl,--whole-archive lib/libc++.a /usr/lib/gcc/x86_64-linux-gnu/4.6/libsupc++.a -Wl,--no-whole-archive -lgcc -lgcc_s -lc -lpthread -lrt

(The same technique was used to flush out multiple definitions in
libstdc++.)

Differential Revision: http://llvm-reviews.chandlerc.com/D1824

Modified:
    libcxx/trunk/src/exception.cpp
    libcxx/trunk/src/new.cpp

Modified: libcxx/trunk/src/exception.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/exception.cpp?rev=192074&r1=192073&r2=192074&view=diff
==============================================================================
--- libcxx/trunk/src/exception.cpp (original)
+++ libcxx/trunk/src/exception.cpp Sun Oct  6 17:13:16 2013
@@ -213,10 +213,14 @@ nested_exception::nested_exception() _NO
 {
 }
 
+#if !defined(__GLIBCXX__)
+
 nested_exception::~nested_exception() _NOEXCEPT
 {
 }
 
+#endif
+
 _LIBCPP_NORETURN
 void
 nested_exception::rethrow_nested() const

Modified: libcxx/trunk/src/new.cpp
URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/src/new.cpp?rev=192074&r1=192073&r2=192074&view=diff
==============================================================================
--- libcxx/trunk/src/new.cpp (original)
+++ libcxx/trunk/src/new.cpp Sun Oct  6 17:13:16 2013
@@ -30,11 +30,13 @@
     #if defined(LIBCXXRT) || __has_include(<cxxabi.h>)
         #include <cxxabi.h>
     #endif  // __has_include(<cxxabi.h>)
-    #ifndef _LIBCPPABI_VERSION
+    #if !defined(_LIBCPPABI_VERSION) && !defined(__GLIBCXX__)
         static std::new_handler __new_handler;
     #endif  // _LIBCPPABI_VERSION
 #endif
 
+#ifndef __GLIBCXX__
+
 // Implement all new and delete operators as weak definitions
 // in this shared library, so that they can be overriden by programs
 // that define non-weak copies of the functions.
@@ -143,13 +145,19 @@ operator delete[] (void* ptr, const std:
     ::operator delete[](ptr);
 }
 
+#endif // !__GLIBCXX__
+
 namespace std
 {
 
+#ifndef __GLIBCXX__
 const nothrow_t nothrow = {};
+#endif
 
 #ifndef _LIBCPPABI_VERSION
 
+#ifndef __GLIBCXX__
+
 new_handler
 set_new_handler(new_handler handler) _NOEXCEPT
 {
@@ -162,12 +170,16 @@ get_new_handler() _NOEXCEPT
     return __sync_fetch_and_add(&__new_handler, (new_handler)0);
 }
 
+#endif // !__GLIBCXX__
+
 #ifndef LIBCXXRT
 
 bad_alloc::bad_alloc() _NOEXCEPT
 {
 }
 
+#ifndef __GLIBCXX__
+
 bad_alloc::~bad_alloc() _NOEXCEPT
 {
 }
@@ -178,6 +190,8 @@ bad_alloc::what() const _NOEXCEPT
     return "std::bad_alloc";
 }
 
+#endif // !__GLIBCXX__
+
 #endif //LIBCXXRT
 
 bad_array_new_length::bad_array_new_length() _NOEXCEPT





More information about the cfe-commits mailing list