[llvm] [CodeGen] Do not emit TRAP for `unreachable` after `@llvm.trap` (PR #94570)

Igor Kudrin via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 10 11:37:41 PDT 2024


================
@@ -1836,6 +1837,16 @@ class CallInst : public CallBase {
   bool canReturnTwice() const { return hasFnAttr(Attribute::ReturnsTwice); }
   void setCanReturnTwice() { addFnAttr(Attribute::ReturnsTwice); }
 
+  bool isNonContinuableTrap() const {
+    switch (getIntrinsicID()) {
+    case Intrinsic::trap:
+    case Intrinsic::ubsantrap:
+      return !hasFnAttr("trap-func-name");
----------------
igorkudrin wrote:

The replacement function is not necessarily treated as `noreturn`:
```
> clang test.c --target=x86_64 -mllvm -ftrap-function=mytrap -S -o -
...
        callq   mytrap at PLT
        popq    %rbp
        retq
```

https://github.com/llvm/llvm-project/pull/94570


More information about the llvm-commits mailing list