https://github.com/hekota updated https://github.com/llvm/llvm-project/pull/106673
>From f060654648707f3bf7ecf68b01db8d7c0a8b2bf6 Mon Sep 17 00:00:00 2001 From: Helena Kotas <heko...@microsoft.com> Date: Thu, 29 Aug 2024 23:51:54 -0700 Subject: [PATCH 1/2] [HLSL] Implement TransformHLSLAttributedResourceType to enable attributed resource types inside templates Follow up from #106181 Related to #104861 --- clang/include/clang/AST/TypeLoc.h | 6 ++++++ clang/lib/Sema/TreeTransform.h | 23 +++++++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/clang/include/clang/AST/TypeLoc.h b/clang/include/clang/AST/TypeLoc.h index 5db39eb3aefa74..2826bedd122d12 100644 --- a/clang/include/clang/AST/TypeLoc.h +++ b/clang/include/clang/AST/TypeLoc.h @@ -951,12 +951,18 @@ class HLSLAttributedResourceTypeLoc HLSLAttributedResourceLocInfo> { public: TypeLoc getWrappedLoc() const { return getInnerTypeLoc(); } + + TypeLoc getContainedLoc() const { + return TypeLoc(getTypePtr()->getContainedType(), getNonLocalData()); + } + void setSourceRange(const SourceRange &R) { getLocalData()->Range = R; } SourceRange getLocalSourceRange() const { return getLocalData()->Range; } void initializeLocal(ASTContext &Context, SourceLocation loc) { setSourceRange(SourceRange()); } QualType getInnerType() const { return getTypePtr()->getWrappedType(); } + unsigned getLocalDataSize() const { return sizeof(HLSLAttributedResourceLocInfo); } }; struct ObjCObjectTypeLocInfo { diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index a4d5d71bd11274..feb0481ccd265a 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -7462,8 +7462,27 @@ QualType TreeTransform<Derived>::TransformBTFTagAttributedType( template <typename Derived> QualType TreeTransform<Derived>::TransformHLSLAttributedResourceType( TypeLocBuilder &TLB, HLSLAttributedResourceTypeLoc TL) { - llvm_unreachable( - "Unexpected TreeTransform for HLSLAttributedResourceTypeLoc"); + + const HLSLAttributedResourceType *oldType = TL.getTypePtr(); + + QualType WrappedTy = getDerived().TransformType(TLB, TL.getWrappedLoc()); + if (WrappedTy.isNull()) + return QualType(); + + QualType ContainedTy = QualType(); + if (!oldType->getContainedType().isNull()) + ContainedTy = getDerived().TransformType(TLB, TL.getContainedLoc()); + + QualType Result = TL.getType(); + if (getDerived().AlwaysRebuild() || + WrappedTy != oldType->getWrappedType() || + ContainedTy != oldType->getContainedType()) { + Result = SemaRef.Context.getHLSLAttributedResourceType( + WrappedTy, ContainedTy, oldType->getAttrs()); + } + + TLB.push<HLSLAttributedResourceTypeLoc>(Result); + return Result; } template<typename Derived> >From 3088b923668bb6a1b47ef269af17552711b74ead Mon Sep 17 00:00:00 2001 From: Helena Kotas <heko...@microsoft.com> Date: Fri, 30 Aug 2024 12:32:17 -0700 Subject: [PATCH 2/2] clang-format --- clang/include/clang/AST/TypeLoc.h | 6 ++++-- clang/lib/Sema/TreeTransform.h | 3 +-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/clang/include/clang/AST/TypeLoc.h b/clang/include/clang/AST/TypeLoc.h index 2826bedd122d12..03fbdcf60140df 100644 --- a/clang/include/clang/AST/TypeLoc.h +++ b/clang/include/clang/AST/TypeLoc.h @@ -952,7 +952,7 @@ class HLSLAttributedResourceTypeLoc public: TypeLoc getWrappedLoc() const { return getInnerTypeLoc(); } - TypeLoc getContainedLoc() const { + TypeLoc getContainedLoc() const { return TypeLoc(getTypePtr()->getContainedType(), getNonLocalData()); } @@ -962,7 +962,9 @@ class HLSLAttributedResourceTypeLoc setSourceRange(SourceRange()); } QualType getInnerType() const { return getTypePtr()->getWrappedType(); } - unsigned getLocalDataSize() const { return sizeof(HLSLAttributedResourceLocInfo); } + unsigned getLocalDataSize() const { + return sizeof(HLSLAttributedResourceLocInfo); + } }; struct ObjCObjectTypeLocInfo { diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index feb0481ccd265a..0513e7b13bc778 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -7474,8 +7474,7 @@ QualType TreeTransform<Derived>::TransformHLSLAttributedResourceType( ContainedTy = getDerived().TransformType(TLB, TL.getContainedLoc()); QualType Result = TL.getType(); - if (getDerived().AlwaysRebuild() || - WrappedTy != oldType->getWrappedType() || + if (getDerived().AlwaysRebuild() || WrappedTy != oldType->getWrappedType() || ContainedTy != oldType->getContainedType()) { Result = SemaRef.Context.getHLSLAttributedResourceType( WrappedTy, ContainedTy, oldType->getAttrs()); _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits