diff options
author | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-12-08 23:42:11 +0000 |
---|---|---|
committer | Alkis Evlogimenos <alkis@evlogimenos.com> | 2004-12-08 23:42:11 +0000 |
commit | a95cf3024b9a3c3ed6bf3e862d956ce46a8cbebe (patch) | |
tree | 9f28964153bdb5e2e32674672a91b67b7a69e449 /lib/Analysis/BasicAliasAnalysis.cpp | |
parent | 5cb77fb193853ee498f3bd6629c45d1eebcf47bb (diff) |
Add testcase and fix for another case where we query the size an
abstract type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@18676 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BasicAliasAnalysis.cpp')
-rw-r--r-- | lib/Analysis/BasicAliasAnalysis.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index 7d6f0fa1d5..a78c8abba2 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -410,13 +410,18 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, // the size of the argument... build an index vector that is equal to // the arguments provided, except substitute 0's for any variable // indexes we find... - for (unsigned i = 0; i != GEPOperands.size(); ++i) - if (!isa<ConstantInt>(GEPOperands[i])) - GEPOperands[i] =Constant::getNullValue(GEPOperands[i]->getType()); - int64_t Offset = getTargetData().getIndexedOffset(BasePtr->getType(), - GEPOperands); - if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size) - return NoAlias; + if (cast<PointerType>( + BasePtr->getType())->getElementType()->isSized()) { + for (unsigned i = 0; i != GEPOperands.size(); ++i) + if (!isa<ConstantInt>(GEPOperands[i])) + GEPOperands[i] = + Constant::getNullValue(GEPOperands[i]->getType()); + int64_t Offset = + getTargetData().getIndexedOffset(BasePtr->getType(), GEPOperands); + + if (Offset >= (int64_t)V2Size || Offset <= -(int64_t)V1Size) + return NoAlias; + } } } } |