On Oct 3, 2013, at 6:08 PM, Peter Collingbourne <[email protected]> wrote:
> 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++.) > > http://llvm-reviews.chandlerc.com/D1824 > > Files: > src/exception.cpp > src/new.cpp > > Index: src/exception.cpp > =================================================================== > --- src/exception.cpp > +++ src/exception.cpp > @@ -189,10 +189,14 @@ > { > } > > +#if !defined(__GLIBCXX__) > + > nested_exception::~nested_exception() _NOEXCEPT > { > } > > +#endif > + > _LIBCPP_NORETURN > void > nested_exception::rethrow_nested() const > Index: src/new.cpp > =================================================================== > --- src/new.cpp > +++ src/new.cpp > @@ -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[](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 @@ > 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 @@ > return "std::bad_alloc"; > } > > +#endif // !__GLIBCXX__ > + > #endif //LIBCXXRT > > bad_array_new_length::bad_array_new_length() _NOEXCEPT > <D1824.1.patch>_______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits Thanks, please commit. Howard _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
