[PATCH] D131698: [Sema] Fix `ExtVectorElementExpr` tree transform for the `isArrow` case.
Michele Scandale via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Aug 11 10:40:15 PDT 2022
michele.scandale created this revision.
michele.scandale added reviewers: rsmith, doug.gregor, rjmccall.
Herald added a project: All.
michele.scandale requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.
Make sure we propagate the value for `IsArrow` to
`RebuildExtVectorElementExpr` in order to be able to handle correctly
vector component accesses where the base value is a pointer.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D131698
Files:
clang/lib/Sema/TreeTransform.h
clang/test/SemaTemplate/instantiate-clang.cpp
Index: clang/test/SemaTemplate/instantiate-clang.cpp
===================================================================
--- clang/test/SemaTemplate/instantiate-clang.cpp
+++ clang/test/SemaTemplate/instantiate-clang.cpp
@@ -18,7 +18,15 @@
template struct ExtVectorAccess0<double2>;
template struct ExtVectorAccess0<double4>;
-typedef __attribute__(( ext_vector_type(2) )) double double2;
+template<typename T>
+struct ExtVectorAccess1 {
+ void f(T *v1, double4 *v2) {
+ v1->xy = v2->yx;
+ }
+};
+
+template struct ExtVectorAccess1<double2>;
+template struct ExtVectorAccess1<double4>;
template<typename T, typename U, int N, int M>
struct ShuffleVector0 {
Index: clang/lib/Sema/TreeTransform.h
===================================================================
--- clang/lib/Sema/TreeTransform.h
+++ clang/lib/Sema/TreeTransform.h
@@ -2779,15 +2779,15 @@
///
/// By default, performs semantic analysis to build the new expression.
/// Subclasses may override this routine to provide different behavior.
- ExprResult RebuildExtVectorElementExpr(Expr *Base,
- SourceLocation OpLoc,
- SourceLocation AccessorLoc,
- IdentifierInfo &Accessor) {
+ ExprResult RebuildExtVectorElementExpr(Expr *Base, SourceLocation OpLoc,
+ bool IsArrow,
+ SourceLocation AccessorLoc,
+ IdentifierInfo &Accessor) {
CXXScopeSpec SS;
DeclarationNameInfo NameInfo(&Accessor, AccessorLoc);
return getSema().BuildMemberReferenceExpr(Base, Base->getType(),
- OpLoc, /*IsArrow*/ false,
+ OpLoc, IsArrow,
SS, SourceLocation(),
/*FirstQualifierInScope*/ nullptr,
NameInfo,
@@ -11385,9 +11385,9 @@
// FIXME: Bad source location
SourceLocation FakeOperatorLoc =
SemaRef.getLocForEndOfToken(E->getBase()->getEndLoc());
- return getDerived().RebuildExtVectorElementExpr(Base.get(), FakeOperatorLoc,
- E->getAccessorLoc(),
- E->getAccessor());
+ return getDerived().RebuildExtVectorElementExpr(
+ Base.get(), FakeOperatorLoc, E->isArrow(), E->getAccessorLoc(),
+ E->getAccessor());
}
template<typename Derived>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D131698.451910.patch
Type: text/x-patch
Size: 2632 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220811/8d29adec/attachment.bin>
More information about the cfe-commits
mailing list