GkvJwa wrote:

> To me this looks wrong - if there are multiple exits out of a try region they 
> need to be marked individually. But i guess what you are getting at is that 
> SEH even in the presence of EHa is not connected to C++ unwinding (unlinke 
> try/catch EHa which has a connection through state numbers). In this concrete 
> case we are emitting `llvm.seh.scope.begin` + `llvm.seh.try.end` around the A 
> d'tor in preparation for EHa c++ unwinding even though we don't need it. The 
> reason this is happening is because `EHScopeStack::pushCleanup` does not 
> differentiate between pure SEH and EHa.
> 
> So I guess a possible fix could be to not emit the EHa C++ unwind region 
> markers if we have a pure SEH function? But this would probably require a 
> more extensive fix.
> 
> Nesting can occur if you simply nest multiple try's. If EHa is actually used 
> for C++ try/catch (not seh), the nesting also directly determines the current 
> state number in the WinEHPrepare pass.

Yes, with SEH on Windows, such a deep nesting is unnecessary; SEH should be 
handled separately. The crash can be understood as a mismatch between begin and 
end.

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

Reply via email to