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; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits