[PATCH] D156821: [CodeGen] [ubsan] Respect integer overflow handling in abs builtin

Eli Friedman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 8 12:02:09 PDT 2023


efriedma added a comment.

The overall approach here seems reasonable.  I mean, technically the undefined behavior is happening in the library, but detecting it early seems like a good idea.

This approach does have a significant limitation, though: CGBuiltin won't detect cases that involve taking the address of abs().  So ubsan won't end up picking up undefined behavior in such calls, and -fwrapv won't apply.  Maybe that's rare enough we don't really care, though.

Needs a release note.

Do we want to update ubsan documentation to reflect this?



================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:2697
+    bool SanitizeBuiltin = SanOpts.has(SanitizerKind::Builtin);
+    bool SanitizeOverflow = SanOpts.has(SanitizerKind::SignedIntegerOverflow);
+
----------------
Putting the behavior under both "builtin" and "signed-integer-overflow" feels a little weird; is there any precedent for that?


================
Comment at: clang/lib/CodeGen/CGBuiltin.cpp:2702
+    case LangOptions::SOB_Defined:
+      Result = Builder.CreateBinaryIntrinsic(
+          Intrinsic::abs, EmitScalarExpr(E->getArg(0)), Builder.getFalse(),
----------------
Can we land the change to directly generate calls to llvm.abs() in the default case separately? This might end up impacting generated code for a variety of workloads, and I'd prefer to have a more clear bisect point.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D156821/new/

https://reviews.llvm.org/D156821



More information about the cfe-commits mailing list