diff --git a/lib/Analysis/BasicAliasAnalysis.cpp b/lib/Analysis/BasicAliasAnalysis.cpp index c50758541ed..98508a8c14c 100644 --- a/lib/Analysis/BasicAliasAnalysis.cpp +++ b/lib/Analysis/BasicAliasAnalysis.cpp @@ -307,7 +307,9 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, if (!isa(O1) && isa(V2)) return NoAlias; // Unique values don't alias null - if (isa(O1) || isa(O1)) + if (isa(O1) || + (isa(O1) && + !cast(O1)->isArrayAllocation())) if (cast(O1->getType())->getElementType()->isSized()) { // If the size of the other access is larger than the total size of the // global/alloca/malloc, it cannot be accessing the global (it's @@ -323,7 +325,9 @@ BasicAliasAnalysis::alias(const Value *V1, unsigned V1Size, if (!isa(O2) && isa(V1)) return NoAlias; // Unique values don't alias null - if (isa(O2) || isa(O2)) + if (isa(O2) || + (isa(O2) && + !cast(O2)->isArrayAllocation())) if (cast(O2->getType())->getElementType()->isSized()) { // If the size of the other access is larger than the total size of the // global/alloca/malloc, it cannot be accessing the object (it's