[clang] 7438a02 - [-Wunsafe-buffer-usage] Fix assert when constexpr size passed to snprintf() (#119786) (#124022)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 10 10:34:54 PST 2025
Author: Thomas Sepez
Date: 2025-02-10T19:34:50+01:00
New Revision: 7438a024b66695fd9a22571da901533e6771a617
URL: https://github.com/llvm/llvm-project/commit/7438a024b66695fd9a22571da901533e6771a617
DIFF: https://github.com/llvm/llvm-project/commit/7438a024b66695fd9a22571da901533e6771a617.diff
LOG: [-Wunsafe-buffer-usage] Fix assert when constexpr size passed to snprintf() (#119786) (#124022)
EvaluateAsConstExpr() can return an lvalue which is not compatible
with a subsequent getInt() call. Instead, use EvaluateAsInt() which
will use all techniques availble to get an int result compatible
with the subsequent getInt() call.
Added:
Modified:
clang/lib/Analysis/UnsafeBufferUsage.cpp
Removed:
################################################################################
diff --git a/clang/lib/Analysis/UnsafeBufferUsage.cpp b/clang/lib/Analysis/UnsafeBufferUsage.cpp
index c064aa30e8aedc6..c51398698922bf8 100644
--- a/clang/lib/Analysis/UnsafeBufferUsage.cpp
+++ b/clang/lib/Analysis/UnsafeBufferUsage.cpp
@@ -930,7 +930,7 @@ AST_MATCHER(CallExpr, hasUnsafeSnprintfBuffer) {
// The array element type must be compatible with `char` otherwise an
// explicit cast will be needed, which will make this check unreachable.
// Therefore, the array extent is same as its' bytewise size.
- if (Size->EvaluateAsConstantExpr(ER, Ctx)) {
+ if (Size->EvaluateAsInt(ER, Ctx)) {
APSInt EVal = ER.Val.getInt(); // Size must have integer type
return APSInt::compareValues(EVal, APSInt(CAT->getSize(), true)) != 0;
More information about the cfe-commits
mailing list