aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/AST/ExprConstant.cpp
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanak@gmail.com>2025-04-24 08:47:29 -0700
committerGitHub <noreply@github.com>2025-04-24 08:47:29 -0700
commitfeaa5aa840dcda69bd4133536142be882f696114 (patch)
tree10772e9b14fa6e7074369684f03d941093fb4829 /clang/lib/AST/ExprConstant.cpp
parent2ca071b1decf006a31385c75478b57013964e49a (diff)
downloadllvm-feaa5aa840dcda69bd4133536142be882f696114.zip
llvm-feaa5aa840dcda69bd4133536142be882f696114.tar.gz
llvm-feaa5aa840dcda69bd4133536142be882f696114.tar.bz2
Fix a crash in constant evaluation of ExtVectorElementExprs (#136771)
Handle the case where the base expression is a pointer to a vector type. rdar://149223362
Diffstat (limited to 'clang/lib/AST/ExprConstant.cpp')
-rw-r--r--clang/lib/AST/ExprConstant.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp
index 7c933f4..f2e49b9 100644
--- a/clang/lib/AST/ExprConstant.cpp
+++ b/clang/lib/AST/ExprConstant.cpp
@@ -9202,7 +9202,10 @@ bool LValueExprEvaluator::VisitExtVectorElementExpr(
if (Success) {
Result.setFrom(Info.Ctx, Val);
- const auto *VT = E->getBase()->getType()->castAs<VectorType>();
+ QualType BaseType = E->getBase()->getType();
+ if (E->isArrow())
+ BaseType = BaseType->getPointeeType();
+ const auto *VT = BaseType->castAs<VectorType>();
HandleLValueVectorElement(Info, E, Result, VT->getElementType(),
VT->getNumElements(), Indices[0]);
}