================
@@ -3452,6 +3452,18 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl 
GD, unsigned BuiltinID,
   case Builtin::BI__builtin_trap:
     EmitTrapCall(Intrinsic::trap);
     return RValue::get(nullptr);
+  case Builtin::BI__builtin_verbose_trap: {
+    llvm::DILocation *TrapLocation = Builder.getCurrentDebugLocation();
+    if (getDebugInfo()) {
+      std::string Str;
+      E->getArg(0)->tryEvaluateString(Str, getContext());
+      TrapLocation =
+          getDebugInfo()->CreateTrapFailureMessageFor(TrapLocation, Str);
+    }
+    ApplyDebugLocation ApplyTrapDI(*this, TrapLocation);
+    EmitTrapCall(Intrinsic::trap);
----------------
ahatanak wrote:

I can tackle it in a separate patch.

For mode 2 and 3 calls, we can annotate the calls with something that indicates 
whether they can be merged only with other calls if the reason is the same or 
they cannot be merged at all. For calls in mode 3, we can just annotate the 
calls with attribute `nomerge`. For mode 2, I think we need to annotate the 
calls with an attribute or something that distinguishes the calls from the 
calls that are mergeable (mode 1) and the ones that aren't (mode 3).

https://github.com/llvm/llvm-project/pull/79230
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to