diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2017-12-18 10:31:58 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2017-12-18 10:31:58 +0000 |
commit | 7bd3fb15e11d4ad8f7b0df8085fb947093267d61 (patch) | |
tree | cd407ab5daca0332e829797d86d12b9cd11e33eb | |
parent | fd967f2f7a05422113df204a282b1a2f8d39888c (diff) | |
download | bcm5719-llvm-7bd3fb15e11d4ad8f7b0df8085fb947093267d61.tar.gz bcm5719-llvm-7bd3fb15e11d4ad8f7b0df8085fb947093267d61.zip |
[TargetLibraryInfo] Discard library functions with incorrectly sized integers
Differential Revision: https://reviews.llvm.org/D41184
llvm-svn: 320964
-rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 6 | ||||
-rw-r--r-- | llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll | 16 |
2 files changed, 19 insertions, 3 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 609b9961deb..d18246ac594 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -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: @@ -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() && @@ -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: diff --git a/llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll b/llvm/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll new file mode 100644 index 00000000000..5c7c49a9708 --- /dev/null +++ b/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 +} |