dougsonos wrote: In working with this version of the compiler, I've discovered a pain point with libc++, `std::__libcpp_verbose_abort()`. Many things which one would expect to be nonblocking, e.g. `std::vector<T>::operator[]`, have hardening paths which call `__libcpp_verbose_abort()` on failure.
I chatted with a libc++ maintainer about this. A first thought was to simply declare `__libcpp_verbose_abort()` as `nonblocking`. But that feels like a weird lie. Possibly most ideally, functions like this would have an attribute to exempt them from nonblocking analysis. A quick hack would be to synthesize that attribute from a combination of the `noreturn` attribute and the function name containing "abort" or "terminate". (`noreturn` on its own is initially attractive, but it can also apply to a wrapper around `throw`). The only workaround is to redeclare `__libcpp_verbose_abort()` with `[[clang::nonblocking]]`. This is tricky because the redeclaration has to follow the one in `<__verbose_abort>` but precede its use from other headers like `<vector>`. That leads to having to include `<__verbose_abort>` directly. Would appreciate any thoughts! https://github.com/llvm/llvm-project/pull/99656 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits