================
@@ -2228,8 +2228,10 @@ void CodeGenFunction::EmitAutoVarCleanups(const 
AutoVarEmission &emission) {
 
   // Check the type for a cleanup.
   if (QualType::DestructionKind dtorKind = D.needsDestruction(getContext())) {
-    // Check if we're in a SEH block with EHa, prevent it
-    if (getLangOpts().EHAsynch && currentFunctionUsesSEHTry())
+    // Check if we're in a SEH block with /EH, prevent it
+    // TODO: /EHs* differs from /EHa, the former may not be executed to this
+    // point.
----------------
GkvJwa wrote:

For example, when separating ehsc and eha, compile the following code snippet

```
void seh_unwinding() {
  __try {
  } __except (1) {
    HasCleanup x;
  }
}
```

When using ehsc, the functionCodeGenFunction::EmitAutoVarCleanups will not be 
called. But eha can

Therefore, most object unwinding can be blocked here when eha is enabled, ehs* 
may need to be blocked elsewhere

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

Reply via email to