[libcxx-commits] [PATCH] D57455: [libunwind] Provide inline placement new definition

Petr Hosek via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Feb 1 22:09:08 PST 2019


phosek updated this revision to Diff 184895.
phosek added a comment.

I tried the suggestion and while `static UnwindCursor<A, R> *operator new(size_t, UnwindCursor<A, R> *p) { return p; }` didn't work because Clang complains:

  note: candidate function not viable: cannot convert argument of incomplete type 'void *' to 'UnwindCursor<libunwind::LocalAddressSpace, libunwind::Registers_x86_64> *' for 2nd argument

`static void *operator new(size_t, void *p) { return p; }` inside `UnwindCursor` does seem to work for both Clang and GCC.


Repository:
  rUNW libunwind

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D57455/new/

https://reviews.llvm.org/D57455

Files:
  libunwind/src/Unwind-seh.cpp
  libunwind/src/UnwindCursor.hpp
  libunwind/src/libunwind.cpp


Index: libunwind/src/libunwind.cpp
===================================================================
--- libunwind/src/libunwind.cpp
+++ libunwind/src/libunwind.cpp
@@ -23,10 +23,6 @@
 
 using namespace libunwind;
 
-// libunwind does not and should not depend on C++ library which means that we
-// need our own declaration of global placement new.
-void *operator new(size_t, void*);
-
 /// internal object to represent this processes address space
 LocalAddressSpace LocalAddressSpace::sThisAddressSpace;
 
Index: libunwind/src/UnwindCursor.hpp
===================================================================
--- libunwind/src/UnwindCursor.hpp
+++ libunwind/src/UnwindCursor.hpp
@@ -894,6 +894,10 @@
   virtual void        saveVFPAsX();
 #endif
 
+  // libunwind does not and should not depend on C++ library which means that we
+  // need our own defition of inline placement new.
+  static void *operator new(size_t, void* p) { return p; }
+
 private:
 
 #if defined(_LIBUNWIND_ARM_EHABI)
Index: libunwind/src/Unwind-seh.cpp
===================================================================
--- libunwind/src/Unwind-seh.cpp
+++ libunwind/src/Unwind-seh.cpp
@@ -49,10 +49,6 @@
 /// Class of foreign exceptions based on unrecognized SEH exceptions.
 static const uint64_t kSEHExceptionClass = 0x434C4E4753454800; // CLNGSEH\0
 
-// libunwind does not and should not depend on C++ library which means that we
-// need our own declaration of global placement new.
-void *operator new(size_t, void*);
-
 /// Exception cleanup routine used by \c _GCC_specific_handler to
 /// free foreign exceptions.
 static void seh_exc_cleanup(_Unwind_Reason_Code urc, _Unwind_Exception *exc) {


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D57455.184895.patch
Type: text/x-patch
Size: 1688 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/libcxx-commits/attachments/20190202/6049f039/attachment-0001.bin>


More information about the libcxx-commits mailing list