Skip to content

Commit

Permalink
[TargetLibraryInfo] Discard library functions with incorrectly sized …
Browse files Browse the repository at this point in the history
…integers

Differential Revision: https://reviews.llvm.org/D41184

llvm-svn: 320964
  • Loading branch information
igor-laevsky committed Dec 18, 2017
1 parent fd967f2 commit 7bd3fb1
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 3 deletions.
6 changes: 3 additions & 3 deletions llvm/lib/Analysis/TargetLibraryInfo.cpp
Expand Up @@ -608,7 +608,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType()->isPointerTy() &&
FTy.getParamType(0) == FTy.getReturnType() &&
FTy.getParamType(1) == FTy.getReturnType() &&
FTy.getParamType(2)->isIntegerTy());
IsSizeTTy(FTy.getParamType(2)));

case LibFunc_strcpy_chk:
case LibFunc_stpcpy_chk:
Expand All @@ -633,7 +633,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType() == FTy.getParamType(0) &&
FTy.getParamType(0) == FTy.getParamType(1) &&
FTy.getParamType(0) == PCharTy &&
FTy.getParamType(2)->isIntegerTy());
IsSizeTTy(FTy.getParamType(2)));

case LibFunc_strxfrm:
return (NumParams == 3 && FTy.getParamType(0)->isPointerTy() &&
Expand All @@ -648,7 +648,7 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy,
return (NumParams == 3 && FTy.getReturnType()->isIntegerTy(32) &&
FTy.getParamType(0)->isPointerTy() &&
FTy.getParamType(0) == FTy.getParamType(1) &&
FTy.getParamType(2)->isIntegerTy());
IsSizeTTy(FTy.getParamType(2)));

case LibFunc_strspn:
case LibFunc_strcspn:
Expand Down
16 changes: 16 additions & 0 deletions llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll
@@ -0,0 +1,16 @@
; Test that the strncpy simplification doesn't crash if datalayout specifies
; 64 bit pointers while length is a 32 bit argument
;
; RUN: opt < %s -instcombine -S | FileCheck %s

target datalayout = "e-p:64:64:64"

declare i32 @strncmp(i8*, i8*, i32)

define i32 @test6(i8* %str1, i8* %str2) {
; CHECK-LABEL: @test6(
; CHECK: call i32 @strncmp(i8* %str1, i8* %str2, i32 1)

%temp1 = call i32 @strncmp(i8* %str1, i8* %str2, i32 1)
ret i32 %temp1
}

0 comments on commit 7bd3fb1

Please sign in to comment.