From 1e7504134ff64cad983e6bba9983dbb03d63b5cc Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 23 Apr 2025 14:58:17 +0200 Subject: [PATCH] [AA] Assert that alias() arguments are pointers Assert instead of returning NoAlias for non-pointers. This makes sure that people don't confused alias (working on locations) with getModRefInfo (working on instructions). --- llvm/lib/Analysis/AliasAnalysis.cpp | 3 +++ llvm/lib/Analysis/BasicAliasAnalysis.cpp | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/llvm/lib/Analysis/AliasAnalysis.cpp b/llvm/lib/Analysis/AliasAnalysis.cpp index efabf69b06047..f4946c30de9bc 100644 --- a/llvm/lib/Analysis/AliasAnalysis.cpp +++ b/llvm/lib/Analysis/AliasAnalysis.cpp @@ -110,6 +110,9 @@ AliasResult AAResults::alias(const MemoryLocation &LocA, AliasResult AAResults::alias(const MemoryLocation &LocA, const MemoryLocation &LocB, AAQueryInfo &AAQI, const Instruction *CtxI) { + assert(LocA.Ptr->getType()->isPointerTy() && + LocB.Ptr->getType()->isPointerTy() && + "Can only call alias() on pointers"); AliasResult Result = AliasResult::MayAlias; if (EnableAATrace) { diff --git a/llvm/lib/Analysis/BasicAliasAnalysis.cpp b/llvm/lib/Analysis/BasicAliasAnalysis.cpp index a46edc0b75f54..2de9bb502baf4 100644 --- a/llvm/lib/Analysis/BasicAliasAnalysis.cpp +++ b/llvm/lib/Analysis/BasicAliasAnalysis.cpp @@ -1574,9 +1574,6 @@ AliasResult BasicAAResult::aliasCheck(const Value *V1, LocationSize V1Size, if (isValueEqualInPotentialCycles(V1, V2, AAQI)) return AliasResult::MustAlias; - if (!V1->getType()->isPointerTy() || !V2->getType()->isPointerTy()) - return AliasResult::NoAlias; // Scalars cannot alias each other - // Figure out what objects these things are pointing to if we can. const Value *O1 = getUnderlyingObject(V1, MaxLookupSearchDepth); const Value *O2 = getUnderlyingObject(V2, MaxLookupSearchDepth);