diff options
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 2 | ||||
-rw-r--r-- | test/Analysis/BasicAA/modref.ll | 17 |
2 files changed, 17 insertions, 2 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 4b7d2f5d9d..d550a1190e 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -714,7 +714,7 @@ BasicAliasAnalysis::getModRefInfo(ImmutableCallSite CS, // is impossible to alias the pointer we're checking. If not, we have to // assume that the call could touch the pointer, even though it doesn't // escape. - if (!isNoAlias(Location(cast<Value>(CI)), Loc)) { + if (!isNoAlias(Location(*CI), Location(Object))) { PassedAsArg = true; break; } diff --git a/test/Analysis/BasicAA/modref.ll b/test/Analysis/BasicAA/modref.ll index 233396b7e5..8421faf9c2 100644 --- a/test/Analysis/BasicAA/modref.ll +++ b/test/Analysis/BasicAA/modref.ll @@ -129,8 +129,23 @@ define i8 @test6(i8* %p, i8* noalias %a) { ; CHECK: ret } +; PR10628 +declare void @test7decl(i32* nocapture %x) +define i32 @test7() nounwind uwtable ssp { +entry: + %x = alloca i32, align 4 + store i32 0, i32* %x, align 4 + %add.ptr = getelementptr inbounds i32* %x, i64 1 + call void @test7decl(i32* %add.ptr) + %tmp = load i32* %x, align 4 + ret i32 %tmp +; CHECK: @test7( +; CHECK: store i32 0 +; CHECK: call void @test7decl +; CHECK: load i32* +} + declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind declare void @llvm.memset.p0i8.i8(i8* nocapture, i8, i8, i32, i1) nounwind declare void @llvm.memcpy.p0i8.p0i8.i8(i8* nocapture, i8* nocapture, i8, i32, i1) nounwind declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind - |