zmodem wrote:

Sorry for the repeated questions, but I'd really like to understand this better 
:)

In https://github.com/llvm/llvm-project/pull/172287 @efriedma-quic said

> The basic issue here is that you can't generate unwind tables for both SEH 
> and C++ exception handling in the same function.

That makes sense to me.

In our case, we are (as far as I'm aware) building with C++ exceptions 
disabled, so that issue should not apply to us?

That's why I don't understand why this PR gates the `err_seh_object_unwinding` 
diagnostic behind `getLangOpts().EHAsynch`. If the problem is mixing SEH and 
C++ exceptions, why not gate it behind  `getLangOpts().CXXExceptions`?

> SEH is important for Windows, it can prevent many EXCEPTION_IN_PAGE_ERROR 
> errors. __For LLVM, it only works when using /EHa__

My understanding was that LLVM has had SEH support for a long time, but only 
for synchronous SEH exceptions. I.e. the following should work:

```
__try {
  foo();  // Bad memory access in here.
} __except(EXCEPTION_IN_PAGE_ERROR) {
  // ...
}
```

even without `/EHa` (as long as foo is not inlined)?

> This issue(#62606) can probably answer most questions. The key point is that 
> the handling of SEH in LLVM is not quite the same as in MSVC. Currently, it 
> can be said that with LLVM, the code within the __except block is only 
> explicitly generated when using /eha.

IIUC that issue is about async SEH. We don't build with `/EHa`, but my 
understanding was that synchronous SEH should still work?

https://github.com/llvm/llvm-project/pull/180108
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to