mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
Revert "[SimplifyLibCalls] sprintf doesn't copy null bytes"
The destination buffer that sprintf uses is restrict qualified, we do not need to worry about derived pointers referenced via format specifiers. This reverts commit r267580. llvm-svn: 267605
This commit is contained in:
parent
a8ed675976
commit
67f60eaa89
@ -1995,10 +1995,9 @@ Value *LibCallSimplifier::optimizeSPrintFString(CallInst *CI, IRBuilder<> &B) {
|
||||
Value *Len = emitStrLen(CI->getArgOperand(2), B, DL, TLI);
|
||||
if (!Len)
|
||||
return nullptr;
|
||||
B.CreateMemCpy(CI->getArgOperand(0), CI->getArgOperand(2), Len, 1);
|
||||
Value *PtrToNullByte =
|
||||
B.CreateGEP(B.getInt8Ty(), CI->getArgOperand(0), Len, "nul");
|
||||
B.CreateStore(B.getInt8(0), PtrToNullByte);
|
||||
Value *IncLen =
|
||||
B.CreateAdd(Len, ConstantInt::get(Len->getType(), 1), "leninc");
|
||||
B.CreateMemCpy(CI->getArgOperand(0), CI->getArgOperand(2), IncLen, 1);
|
||||
|
||||
// The sprintf result is the unincremented number of bytes in the string.
|
||||
return B.CreateIntCast(Len, CI->getType(), false);
|
||||
|
@ -65,9 +65,8 @@ define void @test_simplify5(i8* %dst, i8* %str) {
|
||||
%fmt = getelementptr [3 x i8], [3 x i8]* @percent_s, i32 0, i32 0
|
||||
call i32 (i8*, i8*, ...) @sprintf(i8* %dst, i8* %fmt, i8* %str)
|
||||
; CHECK-NEXT: [[STRLEN:%[a-z0-9]+]] = call i32 @strlen(i8* %str)
|
||||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %str, i32 [[STRLEN]], i32 1, i1 false)
|
||||
; CHECK-NEXT: [[NUL:%[a-z0-9]+]] = getelementptr i8, i8* %dst, i32 [[STRLEN]]
|
||||
; CHECK-NEXT: store i8 0, i8* [[NUL]], align 1
|
||||
; CHECK-NEXT: [[LENINC:%[a-z0-9]+]] = add i32 [[STRLEN]], 1
|
||||
; CHECK-NEXT: call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %str, i32 [[LENINC]], i32 1, i1 false)
|
||||
ret void
|
||||
; CHECK-NEXT: ret void
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user