[PATCH] D121475: [Clang][Sema] Avoid crashing for `__builtin_memcpy_inline` with an array argument
Egor Zhdan via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Mar 14 05:11:03 PDT 2022
egorzhdan updated this revision to Diff 415069.
egorzhdan added a comment.
Rename a lambda to improve readability
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D121475/new/
https://reviews.llvm.org/D121475
Files:
clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/builtins-memcpy-inline.cpp
Index: clang/test/Sema/builtins-memcpy-inline.cpp
===================================================================
--- clang/test/Sema/builtins-memcpy-inline.cpp
+++ clang/test/Sema/builtins-memcpy-inline.cpp
@@ -36,3 +36,9 @@
// we do not try to evaluate size in non intantiated templates.
__builtin_memcpy_inline(dst, src, size);
}
+
+void test_memcpy_inline_implicit_conversion(void *ptr) {
+ char a[5];
+ __builtin_memcpy_inline(ptr, a, 5);
+ __builtin_memcpy_inline(a, ptr, 5);
+}
Index: clang/lib/Sema/SemaChecking.cpp
===================================================================
--- clang/lib/Sema/SemaChecking.cpp
+++ clang/lib/Sema/SemaChecking.cpp
@@ -1943,6 +1943,17 @@
case Builtin::BI__builtin_nontemporal_store:
return SemaBuiltinNontemporalOverloaded(TheCallResult);
case Builtin::BI__builtin_memcpy_inline: {
+ auto ArgArrayConversionFailed = [&](unsigned Arg) {
+ ExprResult ArgExpr =
+ DefaultFunctionArrayLvalueConversion(TheCall->getArg(Arg));
+ if (ArgExpr.isInvalid())
+ return true;
+ TheCall->setArg(Arg, ArgExpr.get());
+ return false;
+ };
+
+ if (ArgArrayConversionFailed(0) || ArgArrayConversionFailed(1))
+ return true;
clang::Expr *SizeOp = TheCall->getArg(2);
// We warn about copying to or from `nullptr` pointers when `size` is
// greater than 0. When `size` is value dependent we cannot evaluate its
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121475.415069.patch
Type: text/x-patch
Size: 1430 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220314/fd5938ed/attachment.bin>
More information about the cfe-commits
mailing list