michele.scandale updated this revision to Diff 466686. michele.scandale added a comment.
Final rebase Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D131698/new/ 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 @@ -2814,20 +2814,18 @@ /// /// 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, - SS, SourceLocation(), - /*FirstQualifierInScope*/ nullptr, - NameInfo, - /* TemplateArgs */ nullptr, - /*S*/ nullptr); + return getSema().BuildMemberReferenceExpr( + Base, Base->getType(), OpLoc, IsArrow, SS, SourceLocation(), + /*FirstQualifierInScope*/ nullptr, NameInfo, + /* TemplateArgs */ nullptr, + /*S*/ nullptr); } /// Build a new initializer list expression. @@ -11424,9 +11422,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>
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 @@ -2814,20 +2814,18 @@ /// /// 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, - SS, SourceLocation(), - /*FirstQualifierInScope*/ nullptr, - NameInfo, - /* TemplateArgs */ nullptr, - /*S*/ nullptr); + return getSema().BuildMemberReferenceExpr( + Base, Base->getType(), OpLoc, IsArrow, SS, SourceLocation(), + /*FirstQualifierInScope*/ nullptr, NameInfo, + /* TemplateArgs */ nullptr, + /*S*/ nullptr); } /// Build a new initializer list expression. @@ -11424,9 +11422,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>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits