================
@@ -7037,6 +7037,46 @@ def CIR_EhInitiateOp : CIR_Op<"eh.initiate"> {
let hasLLVMLowering = false;
}
+//===----------------------------------------------------------------------===//
+// Flattened EH Operations: EhTerminateOp
+//===----------------------------------------------------------------------===//
+
+def CIR_EhTerminateOp : CIR_Op<"eh.terminate", [
+ Terminator
+]> {
+ let summary = "Terminate due to exception thrown during cleanup";
+ let description = [{
+ `cir.eh.terminate` terminates program execution when an exception is thrown
+ while executing cleanup code during exception unwinding. The C++ standard
+ requires that `std::terminate()` be called in this scenario.
+
+ This operation takes an `!cir.eh_token` from a `cir.eh.initiate` operation
+ and acts as a terminator. It is produced during CFG flattening when
throwing
+ calls are found in EH cleanup regions.
+
+ During EH ABI lowering, this is replaced with target-specific termination
+ code. For the Itanium ABI, the `cir.eh.initiate` is lowered to
----------------
erichkeane wrote:
The `cir.eh.initiate` is both lowered to `inflight_exception` and `becomes a
call to...`. Is that not weirdly worded?
https://github.com/llvm/llvm-project/pull/188341
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits