From: Igor Laevsky Date: Mon, 18 Dec 2017 10:31:58 +0000 (+0000) Subject: [TargetLibraryInfo] Discard library functions with incorrectly sized integers X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b887495d4b1c3c9e168566e6c09f03ff80de930d;p=llvm [TargetLibraryInfo] Discard library functions with incorrectly sized integers Differential Revision: https://reviews.llvm.org/D41184 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@320964 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/TargetLibraryInfo.cpp b/lib/Analysis/TargetLibraryInfo.cpp index 609b9961deb..d18246ac594 100644 --- a/lib/Analysis/TargetLibraryInfo.cpp +++ b/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/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll b/test/Transforms/InstCombine/strncmp-wrong-datalayout.ll new file mode 100644 index 00000000000..5c7c49a9708 --- /dev/null +++ b/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 +}