<div dir="ltr">Hi!<br><br>It turned out that I cannot catch `std::bad_alloc&` thrown by the `operator new` when compiling 1.cpp with -fno-rtti and linking against system's libc++.1.dylib/libc++abi.dylib on macOS. This scenario works on Linux, and according to the official libc++ page it is supported ("However linking against it with -fno-rtti is supported", <a href="https://libcxx.llvm.org/">https://libcxx.llvm.org/</a>), however the following code is aborted due to an unhandled exception:<br><br>```1.cpp<br>#include <cstdio><br>#include <new><br><br>int main() {<br>    try {<br>        ::operator new(-1);<br>    } catch (std::bad_alloc& e) {<br>        printf("caught %s\n", e.what());<br>    }<br>    return 0;<br>}<br>```<br><br>Compile & run:<br>```<br>$ clang++ -fno-rtti 1.cpp -o 1_no_rtti<br>$ ./1_no_rtti<br>libc++abi.dylib: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc<br>Abort trap: 6<br>```<br><br>I know about similar issues with exceptions when -fno-rtti on macOS (Polymorphically catching an exception in a -fno-rtti shared library on Mac OS X <a href="https://stackoverflow.com/questions/3638237/polymorphically-catching-an-exception-in-a-fno-rtti-shared-library-on-mac-os-x">https://stackoverflow.com/questions/3638237/polymorphically-catching-an-exception-in-a-fno-rtti-shared-library-on-mac-os-x</a>, Problems throwing and catching exceptions on OS X with -fno-rtti <a href="https://stackoverflow.com/questions/21737201/problems-throwing-and-catching-exceptions-on-os-x-with-fno-rtti">https://stackoverflow.com/questions/21737201/problems-throwing-and-catching-exceptions-on-os-x-with-fno-rtti</a>). There was an issue in Android NDK with exceptions when -flto=thin and it was said that "The problem is that we have multiple copies of a symbol, where one of them is strong, and the others are linkonce_odr" <a href="https://github.com/android/ndk/issues/1046#issuecomment-514469559">https://github.com/android/ndk/issues/1046#issuecomment-514469559</a> (fixed now <a href="https://reviews.llvm.org/D61255">https://reviews.llvm.org/D61255</a>).<br><br>Can anyone shed some light on it? It seems like a bug at the moment, and if your code uses any of libc++.1.dylib/libc++abi.dylib system libraries on macOS, you must leave RTTI enabled, except you have turned exceptions off as well.<br><br>FYI, the difference between non-RTTI (./1_no_rtti) and the default (./1_rtti, with RTTI) Mach-O executables:<br>```<br>$ diff <(nm -C 1_no_rtti) <(nm -C 1_rtti)<br>1c1<br>< 0000000100003f48 s GCC_except_table0<br>---<br>> 0000000100003f68 s GCC_except_table0<br>4,9c4<br>< 0000000100004028 S typeinfo for std::bad_alloc<br>< 0000000100004018 S typeinfo for std::exception<br>< 0000000100003f74 S typeinfo name for std::bad_alloc<br>< 0000000100003f81 S typeinfo name for std::exception<br><                  U vtable for __cxxabiv1::__class_type_info<br><                  U vtable for __cxxabiv1::__si_class_type_info<br>---<br>>                  U typeinfo for std::bad_alloc<br>11c6<br>< 0000000100003ed0 t ___clang_call_terminate<br>---<br>> 0000000100003ef0 t ___clang_call_terminate<br>17c12<br>< 0000000100003e20 T _main<br>---<br>> 0000000100003e40 T _main<br>$ diff <(clang++ -fno-rtti 1.cpp -S -o -) <(clang++ 1.cpp -S -o -)<br>143,169d142<br><       .section        __TEXT,__const<br><       .globl  __ZTSSt9bad_alloc       ## @_ZTSSt9bad_alloc<br><       .weak_definition        __ZTSSt9bad_alloc<br>< __ZTSSt9bad_alloc:<br><       .asciz  "St9bad_alloc"<br><<br><       .globl  __ZTSSt9exception       ## @_ZTSSt9exception<br><       .weak_definition        __ZTSSt9exception<br>< __ZTSSt9exception:<br><       .asciz  "St9exception"<br><<br><       .section        __DATA,__const<br><       .globl  __ZTISt9exception       ## @_ZTISt9exception<br><       .weak_definition        __ZTISt9exception<br><       .p2align        3<br>< __ZTISt9exception:<br><       .quad   __ZTVN10__cxxabiv117__class_type_infoE+16<br><       .quad   __ZTSSt9exception<br><<br><       .globl  __ZTISt9bad_alloc       ## @_ZTISt9bad_alloc<br><       .weak_definition        __ZTISt9bad_alloc<br><       .p2align        3<br>< __ZTISt9bad_alloc:<br><       .quad   __ZTVN10__cxxabiv120__si_class_type_infoE+16<br><       .quad   __ZTSSt9bad_alloc<br><       .quad   __ZTISt9exception<br><<br>```<br><br>Linked issues: <a href="https://reviews.llvm.org/D46665">https://reviews.llvm.org/D46665</a>, <a href="https://reviews.llvm.org/D47092">https://reviews.llvm.org/D47092</a>, <a href="https://reviews.llvm.org/rG2405bd6898151e0a7ffede78b0d0c7c85c0b66d3">https://reviews.llvm.org/rG2405bd6898151e0a7ffede78b0d0c7c85c0b66d3</a>, <a href="https://github.com/Amanieu/asyncplusplus/commit/2360c8993951afab67ab0414288dacae1dbd7195">https://github.com/Amanieu/asyncplusplus/commit/2360c8993951afab67ab0414288dacae1dbd7195</a><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr">- Ilia</div></div></div>