aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/IR/Constants.cpp
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-09-09 21:55:28 +0200
committerNikita Popov <nikita.ppv@gmail.com>2021-09-09 22:04:12 +0200
commitaf382b93831ae6a58bce8bc075458cfd056e3976 (patch)
treee5e450c735e926870adffbca4732539536a9f91e /llvm/lib/IR/Constants.cpp
parent7f48a8aedea7551318f021db5301b481e66712fb (diff)
downloadllvm-af382b93831ae6a58bce8bc075458cfd056e3976.zip
llvm-af382b93831ae6a58bce8bc075458cfd056e3976.tar.gz
llvm-af382b93831ae6a58bce8bc075458cfd056e3976.tar.bz2
[IR] Handle constant expressions in containsUndefinedElement()
If the constant is a constant expression, then getAggregateElement() will return null. Guard against this before calling HasFn().
Diffstat (limited to 'llvm/lib/IR/Constants.cpp')
-rw-r--r--llvm/lib/IR/Constants.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/IR/Constants.cpp b/llvm/lib/IR/Constants.cpp
index b543cbc..c2e91f1 100644
--- a/llvm/lib/IR/Constants.cpp
+++ b/llvm/lib/IR/Constants.cpp
@@ -315,9 +315,11 @@ containsUndefinedElement(const Constant *C,
return false;
for (unsigned i = 0, e = cast<FixedVectorType>(VTy)->getNumElements();
- i != e; ++i)
- if (HasFn(C->getAggregateElement(i)))
- return true;
+ i != e; ++i) {
+ if (Constant *Elem = C->getAggregateElement(i))
+ if (HasFn(Elem))
+ return true;
+ }
}
return false;