diff options
author | Akira Hatanaka <ahatanak@gmail.com> | 2025-04-24 08:47:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-04-24 08:47:29 -0700 |
commit | feaa5aa840dcda69bd4133536142be882f696114 (patch) | |
tree | 10772e9b14fa6e7074369684f03d941093fb4829 /clang/lib/AST/ExprConstant.cpp | |
parent | 2ca071b1decf006a31385c75478b57013964e49a (diff) | |
download | llvm-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.cpp | 5 |
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]); } |