Author: Akira Hatanaka Date: 2025-04-24T08:47:29-07:00 New Revision: feaa5aa840dcda69bd4133536142be882f696114
URL: https://github.com/llvm/llvm-project/commit/feaa5aa840dcda69bd4133536142be882f696114 DIFF: https://github.com/llvm/llvm-project/commit/feaa5aa840dcda69bd4133536142be882f696114.diff LOG: 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 Added: Modified: clang/lib/AST/ExprConstant.cpp clang/test/SemaCXX/constexpr-vectors-access-elements.cpp Removed: ################################################################################ diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index 7c933f47bf7f0..f2e49b9ea669e 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]); } diff --git a/clang/test/SemaCXX/constexpr-vectors-access-elements.cpp b/clang/test/SemaCXX/constexpr-vectors-access-elements.cpp index 08223e15feb72..58efcde414af2 100644 --- a/clang/test/SemaCXX/constexpr-vectors-access-elements.cpp +++ b/clang/test/SemaCXX/constexpr-vectors-access-elements.cpp @@ -43,4 +43,6 @@ static_assert(b.lo.lo == 1); // expected-error {{not an integral constant expres // make sure clang rejects taking address of a vector element static_assert(&b[1]); // expected-error {{address of vector element requested}} +constexpr const FourIntsExtVec *p = &b; +static_assert(p->x == 1); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits