rjmccall added a comment.

In D108905#2973172 <https://reviews.llvm.org/D108905#2973172>, @modimo wrote:

> In D108905#2973099 <https://reviews.llvm.org/D108905#2973099>, @rjmccall 
> wrote:
>
>> Yeah, I think this is the most natural interpretation of the current 
>> standard.  But that would be a very unfortunate rule, because people who 
>> write `catch (...) {}` do reasonably expect that that code will never throw. 
>>   In fact, it would be quite difficult — perhaps impossible — to write code 
>> that actually swallowed all exceptions: even `try { try { foo() } catch(...) 
>> {} } catch (...) {}` wouldn't work, because you could throw an exception 
>> whose destructor throws an exception whose destructor throws an exception ad 
>> infinitum.
>
> Yeah it's not great and also something that practically will never happen. I 
> think terminate guards are the only thing that really swallows all exceptions 
> except here you can't guard the catch variable destructor unless you want to 
> change up and depend on library implementation. My immediate thought is 
> something like `catch(...) noexcept {}` to express this but it's a solution 
> to a problem that really shouldn't exist.

Well, I think `catch (...) { std::terminate(); }` should work to express that 
outer catch, if only because the end of the catch is never reached.  But yeah, 
I agree that this is clearly a problem that shouldn't exist.

We might be able to require exception types to have `noexcept` destructors.  
Formally, it would have source compatibility / language-version incompatibility 
implications, but in practice I doubt it would cause many problems, especially 
if it was just a "if this actually throws it'll have UB" warning in pre-C++23 
language modes for throwing types with explicitly noexcept destructors.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D108905

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to