diff options
| author | Michael Kuperstein <mkuper@google.com> | 2016-09-20 23:10:31 +0000 |
|---|---|---|
| committer | Michael Kuperstein <mkuper@google.com> | 2016-09-20 23:10:31 +0000 |
| commit | 79dcc274b4c5334389b629a75d915cf954995b15 (patch) | |
| tree | a2d6fc93f59d78588451b95c5e078872cac6ae12 | |
| parent | 620c140a9b50b715296f2e1412834aac151bb440 (diff) | |
| download | bcm5719-llvm-79dcc274b4c5334389b629a75d915cf954995b15.tar.gz bcm5719-llvm-79dcc274b4c5334389b629a75d915cf954995b15.zip | |
[InferAttributes] Don't access parameters that don't exist.
Check for the correct number of parameters before querying their type.
This fixes PR30455.
llvm-svn: 282038
| -rw-r--r-- | llvm/lib/Analysis/TargetLibraryInfo.cpp | 4 | ||||
| -rw-r--r-- | llvm/test/Transforms/InferFunctionAttrs/pr30455.ll | 13 |
2 files changed, 15 insertions, 2 deletions
diff --git a/llvm/lib/Analysis/TargetLibraryInfo.cpp b/llvm/lib/Analysis/TargetLibraryInfo.cpp index 2a47390b4cb..98f23214c65 100644 --- a/llvm/lib/Analysis/TargetLibraryInfo.cpp +++ b/llvm/lib/Analysis/TargetLibraryInfo.cpp @@ -847,10 +847,10 @@ bool TargetLibraryInfoImpl::isValidProtoForLibFunc(const FunctionType &FTy, case LibFunc::stat64: case LibFunc::lstat64: case LibFunc::statvfs64: - return (NumParams >= 1 && FTy.getParamType(0)->isPointerTy() && + return (NumParams == 2 && FTy.getParamType(0)->isPointerTy() && FTy.getParamType(1)->isPointerTy()); case LibFunc::dunder_isoc99_sscanf: - return (NumParams >= 1 && FTy.getParamType(0)->isPointerTy() && + return (NumParams >= 2 && FTy.getParamType(0)->isPointerTy() && FTy.getParamType(1)->isPointerTy()); case LibFunc::fopen64: return (NumParams == 2 && FTy.getReturnType()->isPointerTy() && diff --git a/llvm/test/Transforms/InferFunctionAttrs/pr30455.ll b/llvm/test/Transforms/InferFunctionAttrs/pr30455.ll new file mode 100644 index 00000000000..e12e58b42bd --- /dev/null +++ b/llvm/test/Transforms/InferFunctionAttrs/pr30455.ll @@ -0,0 +1,13 @@ +; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -inferattrs -S | FileCheck %s +%struct.statvfs64 = type { i32 } + +; Function Attrs: norecurse uwtable +define i32 @foo() { +entry: + %st = alloca %struct.statvfs64, align 4 + %0 = bitcast %struct.statvfs64* %st to i8* + ret i32 0 +} + +; CHECK: declare i32 @statvfs64(%struct.statvfs64*){{$}} +declare i32 @statvfs64(%struct.statvfs64*) |

