llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-clang Author: Akira Hatanaka (ahatanak) <details> <summary>Changes</summary> Handle the case where the base expression is a pointer to a vector type. rdar://149223362 --- Full diff: https://github.com/llvm/llvm-project/pull/136771.diff 2 Files Affected: - (modified) clang/lib/AST/ExprConstant.cpp (+4-1) - (modified) clang/test/SemaCXX/constexpr-vectors-access-elements.cpp (+2) ``````````diff diff --git a/clang/lib/AST/ExprConstant.cpp b/clang/lib/AST/ExprConstant.cpp index f598ef5929aa4..fd870c84796a5 100644 --- a/clang/lib/AST/ExprConstant.cpp +++ b/clang/lib/AST/ExprConstant.cpp @@ -9197,7 +9197,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); } `````````` </details> https://github.com/llvm/llvm-project/pull/136771 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits