Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions clang/lib/CodeGen/CGBuiltin.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4531,6 +4531,12 @@ RValue CodeGenFunction::EmitBuiltinExpr(const GlobalDecl GD, unsigned BuiltinID,
Value *SizeVal = EmitScalarExpr(E->getArg(2));
EmitArgCheck(TCK_Store, Dest, E->getArg(0), 0);
EmitArgCheck(TCK_Load, Src, E->getArg(1), 1);
if (BuiltinID == Builtin::BImemcpy || BuiltinID == Builtin::BImempcpy) {
Builder.CreateAssumption(
Builder.CreateIsNotNull(Dest.emitRawPointer(*this)));
Builder.CreateAssumption(
Builder.CreateIsNotNull(Src.emitRawPointer(*this)));
}
Builder.CreateMemCpy(Dest, Src, SizeVal, false);
if (BuiltinID == Builtin::BImempcpy ||
BuiltinID == Builtin::BI__builtin_mempcpy)
Expand Down
4 changes: 4 additions & 0 deletions clang/test/CodeGen/catch-undef-behavior.c
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,10 @@ void call_memcpy_nonnull(void *p, void *q, int sz) {
// CHECK-TRAP: call void @llvm.ubsantrap(i8 16)
// CHECK-COMMON-NOT: call

// CHECK-COMMON: %5 = icmp ne ptr %0, null
// CHECK-COMMON: call void @llvm.assume(i1 %5)
// CHECK-COMMON: %6 = icmp ne ptr %0, null
// CHECK-COMMON: call void @llvm.assume(i1 %6)
// CHECK-COMMON: call void @llvm.memcpy.p0.p0.i64(ptr align 1 %0, ptr align 1 %1, i64 %conv, i1 false)
memcpy(p, q, sz);
}
Expand Down
Loading