[clang] Add concepts to ast (PR #116407)
Joshua Batista via cfe-commits
cfe-commits at lists.llvm.org
Fri Nov 15 08:43:18 PST 2024
https://github.com/bob80905 updated https://github.com/llvm/llvm-project/pull/116407
>From 68985e64694b0f6e0e779d4711bbff8afb3fe6b2 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 10 Oct 2024 14:31:25 -0700
Subject: [PATCH 01/19] ConceptSpecializationExpr shows up in AST!!!
---
clang/include/clang/Sema/HLSLExternalSemaSource.h | 2 ++
clang/lib/AST/DeclTemplate.cpp | 6 +++---
2 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/clang/include/clang/Sema/HLSLExternalSemaSource.h b/clang/include/clang/Sema/HLSLExternalSemaSource.h
index 3c7495e66055dc..0266bc0f8b336e 100644
--- a/clang/include/clang/Sema/HLSLExternalSemaSource.h
+++ b/clang/include/clang/Sema/HLSLExternalSemaSource.h
@@ -47,6 +47,8 @@ class HLSLExternalSemaSource : public ExternalSemaSource {
using ExternalASTSource::CompleteType;
/// Complete an incomplete HLSL builtin type
void CompleteType(TagDecl *Tag) override;
+
+ ConceptDecl *getTypedBufferConceptDecl(Sema &S, CXXRecordDecl *Decl);
};
} // namespace clang
diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp
index a221d619672b38..4a185aedf825de 100644
--- a/clang/lib/AST/DeclTemplate.cpp
+++ b/clang/lib/AST/DeclTemplate.cpp
@@ -1071,10 +1071,10 @@ ConceptDecl *ConceptDecl::Create(ASTContext &C, DeclContext *DC,
TemplateParameterList *Params,
Expr *ConstraintExpr) {
bool Invalid = AdoptTemplateParameterList(Params, DC);
- auto *TD = new (C, DC) ConceptDecl(DC, L, Name, Params, ConstraintExpr);
+ auto *CD = new (C, DC) ConceptDecl(DC, L, Name, Params, ConstraintExpr);
if (Invalid)
- TD->setInvalidDecl();
- return TD;
+ CD->setInvalidDecl();
+ return CD;
}
ConceptDecl *ConceptDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID) {
>From 44b662c59077d1fca6f8a3629a1589588db84942 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 10 Oct 2024 15:51:23 -0700
Subject: [PATCH 02/19] CSE is in the right spot in the AST
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index d90a7d3c697a04..f39954d1ff7cd9 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -414,13 +414,13 @@ struct TemplateParameterListBuilder {
ConceptSpecializationExpr *CSE =
ConceptSpecializationExpr::Create(Context, CR, ImplicitCSEDecl, &CS);
-
return CSE;
}
BuiltinTypeDeclBuilder &finalizeTemplateArgs(ConceptDecl *CD = nullptr) {
if (Params.empty())
return Builder;
+
ConceptSpecializationExpr *CSE =
CD ? constructConceptSpecializationExpr(S, CD) : nullptr;
>From 7df0434530083fbcc9473528229c27f192e5fe93 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 10 Oct 2024 17:55:46 -0700
Subject: [PATCH 03/19] templateArg is aligned correctly on the AST
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index f39954d1ff7cd9..1760e2e7738be2 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -342,6 +342,7 @@ struct TemplateParameterListBuilder {
RWBuffer<int> Buf;
}
+<<<<<<< HEAD
When dumping the AST and filtering for "RWBuffer", the resulting AST
structure is what we're trying to construct below, specifically the
CSE portion.
>From cff6af2700d61dc9a9821b1b5e037662f5b2b5ba Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Tue, 15 Oct 2024 11:42:26 -0700
Subject: [PATCH 04/19] template arguments are in the right spot!
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index 1760e2e7738be2..9f5532cfb8b264 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -342,7 +342,6 @@ struct TemplateParameterListBuilder {
RWBuffer<int> Buf;
}
-<<<<<<< HEAD
When dumping the AST and filtering for "RWBuffer", the resulting AST
structure is what we're trying to construct below, specifically the
CSE portion.
@@ -446,6 +445,9 @@ struct TemplateParameterListBuilder {
QualType T = Builder.Template->getInjectedClassNameSpecialization();
T = S.Context.getInjectedClassNameType(Builder.Record, T);
+ ArrayRef<TemplateArgument> TempArgs =
+ Builder.Template->getInjectedTemplateArgs();
+
return Builder;
}
};
@@ -460,7 +462,7 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addSimpleTemplateParams(
Sema &S, ArrayRef<StringRef> Names, ConceptDecl *CD = nullptr) {
TemplateParameterListBuilder Builder = this->addTemplateArgumentList(S);
for (StringRef Name : Names)
- Builder.addTypeParameter(Name);
+ Builder.addTypenameTypeParameter(Name);
return Builder.finalizeTemplateArgs(CD);
}
>From 93ccc1d8bd23947f4eb777e08afb362e7e8b1cc2 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Wed, 16 Oct 2024 12:48:09 -0700
Subject: [PATCH 05/19] remove useless function
---
clang/include/clang/Sema/HLSLExternalSemaSource.h | 2 --
clang/lib/Sema/HLSLExternalSemaSource.cpp | 2 +-
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/clang/include/clang/Sema/HLSLExternalSemaSource.h b/clang/include/clang/Sema/HLSLExternalSemaSource.h
index 0266bc0f8b336e..3c7495e66055dc 100644
--- a/clang/include/clang/Sema/HLSLExternalSemaSource.h
+++ b/clang/include/clang/Sema/HLSLExternalSemaSource.h
@@ -47,8 +47,6 @@ class HLSLExternalSemaSource : public ExternalSemaSource {
using ExternalASTSource::CompleteType;
/// Complete an incomplete HLSL builtin type
void CompleteType(TagDecl *Tag) override;
-
- ConceptDecl *getTypedBufferConceptDecl(Sema &S, CXXRecordDecl *Decl);
};
} // namespace clang
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index 9f5532cfb8b264..132aad07cf0acd 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -462,7 +462,7 @@ BuiltinTypeDeclBuilder &BuiltinTypeDeclBuilder::addSimpleTemplateParams(
Sema &S, ArrayRef<StringRef> Names, ConceptDecl *CD = nullptr) {
TemplateParameterListBuilder Builder = this->addTemplateArgumentList(S);
for (StringRef Name : Names)
- Builder.addTypenameTypeParameter(Name);
+ Builder.addTypeParameter(Name);
return Builder.finalizeTemplateArgs(CD);
}
>From 6ca40b81216a66576192a034bf1a044b029ae18b Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Wed, 16 Oct 2024 13:40:15 -0700
Subject: [PATCH 06/19] some variable renaming, function rearranging
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 103 +++++++++++++++++++++-
1 file changed, 101 insertions(+), 2 deletions(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index 132aad07cf0acd..fbf7dc9fb0901b 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -298,11 +298,12 @@ struct TemplateParameterListBuilder {
BuiltinTypeDeclBuilder &Builder;
Sema &S;
llvm::SmallVector<NamedDecl *> Params;
+
TemplateParameterListBuilder(Sema &S, BuiltinTypeDeclBuilder &RB)
: Builder(RB), S(S) {}
- ~TemplateParameterListBuilder() { finalizeTemplateArgs(); }
+ ~TemplateParameterListBuilder() { finalizeTemplateArgs(nullptr); }
TemplateParameterListBuilder &
addTypeParameter(StringRef Name, QualType DefaultValue = QualType()) {
@@ -322,7 +323,7 @@ struct TemplateParameterListBuilder {
SourceLocation()));
Params.emplace_back(Decl);
return *this;
- }
+ }
/*
The concept specialization expression (CSE) constructed in
@@ -664,6 +665,104 @@ ConceptDecl *constructTypedBufferConceptDecl(Sema &S, NamespaceDecl *NSD) {
return CD;
}
+BinaryOperator *getSizeOfLEQ16Expr(clang::ASTContext &context,
+ SourceLocation NameLoc,
+ TemplateTypeParmDecl *T) {
+ // Obtain the QualType for 'unsigned long'
+ clang::QualType unsignedLongType = context.UnsignedLongTy;
+
+ // Create a QualType that points to this TemplateTypeParmDecl
+ clang::QualType TType = context.getTypeDeclType(T);
+
+ // Create a TypeSourceInfo for the template type parameter 'T'
+ clang::TypeSourceInfo *TTypeSourceInfo =
+ context.getTrivialTypeSourceInfo(TType, NameLoc);
+
+ clang::UnaryExprOrTypeTraitExpr *sizeOfExpr = new (context)
+ clang::UnaryExprOrTypeTraitExpr(clang::UETT_SizeOf, TTypeSourceInfo,
+ unsignedLongType, NameLoc, NameLoc);
+
+ // Create an IntegerLiteral for the value '16' with size type
+ clang::QualType sizeType = context.getSizeType();
+ llvm::APInt sizeValue = llvm::APInt(context.getTypeSize(sizeType), 16);
+ clang::IntegerLiteral *sizeLiteral = new (context)
+ clang::IntegerLiteral(context, sizeValue, sizeType, NameLoc);
+
+ clang::QualType BoolTy = context.BoolTy;
+
+ clang::BinaryOperator *binaryOperator = clang::BinaryOperator::Create(
+ context, sizeOfExpr, // Left-hand side expression
+ sizeLiteral, // Right-hand side expression
+ clang::BO_LE, // Binary operator kind (<=)
+ BoolTy, // Result type (bool)
+ clang::VK_LValue, // Value kind
+ clang::OK_Ordinary, // Object kind
+ NameLoc, // Source location of operator
+ FPOptionsOverride());
+
+ return binaryOperator;
+}
+
+Expr *getTypedBufferConstraintExpr(Sema &S, SourceLocation NameLoc,
+ TemplateTypeParmDecl *T) {
+ clang::ASTContext &context = S.getASTContext();
+
+ // first get the "sizeof(T) <= 16" expression, as a binary operator
+ BinaryOperator *sizeOfLEQ16 = getSizeOfLEQ16Expr(context, NameLoc, T);
+ // TODO: add the '__builtin_hlsl_is_line_vector_layout_compatible' builtin
+ // and return a binary operator that evaluates the builtin on the given
+ // template type parameter 'T'
+ return sizeOfLEQ16;
+}
+
+ConceptDecl *getTypedBufferConceptDecl(Sema &S) {
+ DeclContext *DC = S.CurContext;
+ clang::ASTContext &context = S.getASTContext();
+ SourceLocation DeclLoc = SourceLocation();
+
+ IdentifierInfo &IsValidLineVectorII =
+ context.Idents.get("is_valid_line_vector");
+ IdentifierInfo &ElementTypeII =
+ context.Idents.get("element_type");
+ clang::TemplateTypeParmDecl *T = clang::TemplateTypeParmDecl::Create(
+ context, context.getTranslationUnitDecl(), DeclLoc, DeclLoc,
+ /*depth=*/0,
+ /*position=*/0,
+ /*id=*/&ElementTypeII,
+ /*Typename=*/true,
+ /*ParameterPack=*/false);
+
+ T->setDeclContext(DC);
+ T->setReferenced();
+
+ // Create and Attach Template Parameter List to ConceptDecl
+ llvm::ArrayRef<NamedDecl *> TemplateParams = {T};
+ clang::TemplateParameterList *ConceptParams =
+ clang::TemplateParameterList::Create(context, DeclLoc, DeclLoc,
+ TemplateParams, DeclLoc, nullptr);
+
+ DeclarationName DeclName = DeclarationName(&IsValidLineVectorII);
+ Expr *ConstraintExpr = getTypedBufferConstraintExpr(S, DeclLoc, T);
+
+ // Create a ConceptDecl
+ clang::ConceptDecl *conceptDecl = clang::ConceptDecl::Create(
+ context,
+ context.getTranslationUnitDecl(), // DeclContext
+ DeclLoc, // Source location of start of concept
+ DeclName, // Source location of end of concept
+ ConceptParams, // Template type parameter
+ ConstraintExpr // Expression defining the concept
+ );
+
+ // Attach the template parameter list to the ConceptDecl
+ conceptDecl->setTemplateParameters(ConceptParams);
+
+ // Add the concept declaration to the Translation Unit Decl
+ context.getTranslationUnitDecl()->addDecl(conceptDecl);
+
+ return conceptDecl;
+}
+
void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
CXXRecordDecl *Decl;
ConceptDecl *TypedBufferConcept =
>From 0de7090210b854c89a8384acfef2d3aa9f0242c1 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Wed, 16 Oct 2024 13:42:13 -0700
Subject: [PATCH 07/19] clang format
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index fbf7dc9fb0901b..ef70a93c036e64 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -298,7 +298,6 @@ struct TemplateParameterListBuilder {
BuiltinTypeDeclBuilder &Builder;
Sema &S;
llvm::SmallVector<NamedDecl *> Params;
-
TemplateParameterListBuilder(Sema &S, BuiltinTypeDeclBuilder &RB)
: Builder(RB), S(S) {}
@@ -323,7 +322,7 @@ struct TemplateParameterListBuilder {
SourceLocation()));
Params.emplace_back(Decl);
return *this;
- }
+ }
/*
The concept specialization expression (CSE) constructed in
@@ -722,8 +721,7 @@ ConceptDecl *getTypedBufferConceptDecl(Sema &S) {
IdentifierInfo &IsValidLineVectorII =
context.Idents.get("is_valid_line_vector");
- IdentifierInfo &ElementTypeII =
- context.Idents.get("element_type");
+ IdentifierInfo &ElementTypeII = context.Idents.get("element_type");
clang::TemplateTypeParmDecl *T = clang::TemplateTypeParmDecl::Create(
context, context.getTranslationUnitDecl(), DeclLoc, DeclLoc,
/*depth=*/0,
>From e685e6784916db665991d029bd88e39d69b2d692 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 17 Oct 2024 11:03:52 -0700
Subject: [PATCH 08/19] add default nullptr, remove comments
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 11 +++--------
1 file changed, 3 insertions(+), 8 deletions(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index ef70a93c036e64..eb9241cd18ee95 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -302,7 +302,7 @@ struct TemplateParameterListBuilder {
TemplateParameterListBuilder(Sema &S, BuiltinTypeDeclBuilder &RB)
: Builder(RB), S(S) {}
- ~TemplateParameterListBuilder() { finalizeTemplateArgs(nullptr); }
+ ~TemplateParameterListBuilder() { finalizeTemplateArgs(); }
TemplateParameterListBuilder &
addTypeParameter(StringRef Name, QualType DefaultValue = QualType()) {
@@ -744,13 +744,8 @@ ConceptDecl *getTypedBufferConceptDecl(Sema &S) {
// Create a ConceptDecl
clang::ConceptDecl *conceptDecl = clang::ConceptDecl::Create(
- context,
- context.getTranslationUnitDecl(), // DeclContext
- DeclLoc, // Source location of start of concept
- DeclName, // Source location of end of concept
- ConceptParams, // Template type parameter
- ConstraintExpr // Expression defining the concept
- );
+ context, context.getTranslationUnitDecl(), DeclLoc, DeclName,
+ ConceptParams, ConstraintExpr);
// Attach the template parameter list to the ConceptDecl
conceptDecl->setTemplateParameters(ConceptParams);
>From 023b81a0120b9f46a303177279fdbbe49fc4ddf8 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 17 Oct 2024 16:18:52 -0700
Subject: [PATCH 09/19] remove unused var, use vector to extend memory
lifetime, may need to extend further
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index eb9241cd18ee95..2638d3f7515115 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -445,9 +445,6 @@ struct TemplateParameterListBuilder {
QualType T = Builder.Template->getInjectedClassNameSpecialization();
T = S.Context.getInjectedClassNameType(Builder.Record, T);
- ArrayRef<TemplateArgument> TempArgs =
- Builder.Template->getInjectedTemplateArgs();
-
return Builder;
}
};
@@ -734,7 +731,9 @@ ConceptDecl *getTypedBufferConceptDecl(Sema &S) {
T->setReferenced();
// Create and Attach Template Parameter List to ConceptDecl
- llvm::ArrayRef<NamedDecl *> TemplateParams = {T};
+ std::vector<NamedDecl *> TemplateParamsVec = {T};
+ llvm::ArrayRef<NamedDecl *> TemplateParams(TemplateParamsVec);
+
clang::TemplateParameterList *ConceptParams =
clang::TemplateParameterList::Create(context, DeclLoc, DeclLoc,
TemplateParams, DeclLoc, nullptr);
>From 22ab32732d06722ec56d1ceeba063e3510cf2ffb Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 18 Oct 2024 00:33:43 -0700
Subject: [PATCH 10/19] address everything
---
clang/lib/AST/DeclTemplate.cpp | 6 +++---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 8 +++-----
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/clang/lib/AST/DeclTemplate.cpp b/clang/lib/AST/DeclTemplate.cpp
index 4a185aedf825de..a221d619672b38 100644
--- a/clang/lib/AST/DeclTemplate.cpp
+++ b/clang/lib/AST/DeclTemplate.cpp
@@ -1071,10 +1071,10 @@ ConceptDecl *ConceptDecl::Create(ASTContext &C, DeclContext *DC,
TemplateParameterList *Params,
Expr *ConstraintExpr) {
bool Invalid = AdoptTemplateParameterList(Params, DC);
- auto *CD = new (C, DC) ConceptDecl(DC, L, Name, Params, ConstraintExpr);
+ auto *TD = new (C, DC) ConceptDecl(DC, L, Name, Params, ConstraintExpr);
if (Invalid)
- CD->setInvalidDecl();
- return CD;
+ TD->setInvalidDecl();
+ return TD;
}
ConceptDecl *ConceptDecl::CreateDeserialized(ASTContext &C, GlobalDeclID ID) {
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index 2638d3f7515115..2ee1db07134457 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -414,6 +414,7 @@ struct TemplateParameterListBuilder {
ConceptSpecializationExpr *CSE =
ConceptSpecializationExpr::Create(Context, CR, ImplicitCSEDecl, &CS);
+
return CSE;
}
@@ -731,12 +732,9 @@ ConceptDecl *getTypedBufferConceptDecl(Sema &S) {
T->setReferenced();
// Create and Attach Template Parameter List to ConceptDecl
- std::vector<NamedDecl *> TemplateParamsVec = {T};
- llvm::ArrayRef<NamedDecl *> TemplateParams(TemplateParamsVec);
-
clang::TemplateParameterList *ConceptParams =
- clang::TemplateParameterList::Create(context, DeclLoc, DeclLoc,
- TemplateParams, DeclLoc, nullptr);
+ clang::TemplateParameterList::Create(context, DeclLoc, DeclLoc, {T},
+ DeclLoc, nullptr);
DeclarationName DeclName = DeclarationName(&IsValidLineVectorII);
Expr *ConstraintExpr = getTypedBufferConstraintExpr(S, DeclLoc, T);
>From 530afd23913ab2826d8cd4144853091b971cb7b0 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 18 Oct 2024 14:05:40 -0700
Subject: [PATCH 11/19] undo formatting problem
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index 2ee1db07134457..fba767776b0ebb 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -334,6 +334,7 @@ struct TemplateParameterListBuilder {
template<typename element_type> requires
is_typed_resource_element_compatible<element_type>
+
struct RWBuffer {
element_type Val;
};
>From 269c0864c07eb9a16a08415cb4c016226cacf4b7 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 18 Oct 2024 14:28:04 -0700
Subject: [PATCH 12/19] get rid of clang:: specifier for enum values
>From 427f623e4c54473444b467ea5876942de326e645 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 18 Oct 2024 15:57:22 -0700
Subject: [PATCH 13/19] clang format
>From e636c9452ee71f1e4aa6d2da7805137b0c397ba4 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Tue, 5 Nov 2024 14:49:38 -0800
Subject: [PATCH 14/19] fix typo
>From 48757eab9f3c4133bd23537bb3ad71f244c64a90 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 7 Nov 2024 14:43:35 -0800
Subject: [PATCH 15/19] address damyan, clarify comments
---
clang/lib/Sema/HLSLExternalSemaSource.cpp | 1 -
1 file changed, 1 deletion(-)
diff --git a/clang/lib/Sema/HLSLExternalSemaSource.cpp b/clang/lib/Sema/HLSLExternalSemaSource.cpp
index fba767776b0ebb..2ee1db07134457 100644
--- a/clang/lib/Sema/HLSLExternalSemaSource.cpp
+++ b/clang/lib/Sema/HLSLExternalSemaSource.cpp
@@ -334,7 +334,6 @@ struct TemplateParameterListBuilder {
template<typename element_type> requires
is_typed_resource_element_compatible<element_type>
-
struct RWBuffer {
element_type Val;
};
>From 1d288f27aae0015136602cc6b936205d5af8fc45 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Thu, 7 Nov 2024 16:07:54 -0800
Subject: [PATCH 16/19] nfc to kick off bots again
>From 80384c9ed3b77bf7bd7888be54a0201444df9a79 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 8 Nov 2024 15:29:42 -0800
Subject: [PATCH 17/19] clarify comment, add concept AST test
>From b2ce314764298fcd29f1dc15914a71dcd9ab32bd Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Wed, 13 Nov 2024 15:25:58 -0800
Subject: [PATCH 18/19] use namespace decl as context
>From b69515f25818f69146c91fe3a9b1190620c00a35 Mon Sep 17 00:00:00 2001
From: Joshua Batista <jbatista at microsoft.com>
Date: Fri, 15 Nov 2024 08:38:25 -0800
Subject: [PATCH 19/19] update new tests
---
clang/test/AST/HLSL/AppendStructuredBuffer-AST.hlsl | 4 ++--
clang/test/AST/HLSL/ConsumeStructuredBuffer-AST.hlsl | 4 ++--
clang/test/AST/HLSL/RWStructuredBuffer-AST.hlsl | 4 ++--
.../test/AST/HLSL/RasterizerOrderedStructuredBuffer-AST.hlsl | 4 ++--
4 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/clang/test/AST/HLSL/AppendStructuredBuffer-AST.hlsl b/clang/test/AST/HLSL/AppendStructuredBuffer-AST.hlsl
index 5a13ca7735f999..8dbab44024d34d 100644
--- a/clang/test/AST/HLSL/AppendStructuredBuffer-AST.hlsl
+++ b/clang/test/AST/HLSL/AppendStructuredBuffer-AST.hlsl
@@ -12,7 +12,7 @@
// instantiated specialization.
// EMPTY: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit AppendStructuredBuffer
-// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// EMPTY-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit <undeserialized declarations> class AppendStructuredBuffer
// EMPTY-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
@@ -26,7 +26,7 @@ AppendStructuredBuffer<int> Buffer;
#endif
// CHECK: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit AppendStructuredBuffer
-// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// CHECK-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit class AppendStructuredBuffer definition
// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
diff --git a/clang/test/AST/HLSL/ConsumeStructuredBuffer-AST.hlsl b/clang/test/AST/HLSL/ConsumeStructuredBuffer-AST.hlsl
index b75f3fcb959cfc..f27941b539b6a8 100644
--- a/clang/test/AST/HLSL/ConsumeStructuredBuffer-AST.hlsl
+++ b/clang/test/AST/HLSL/ConsumeStructuredBuffer-AST.hlsl
@@ -12,7 +12,7 @@
// instantiated specialization.
// EMPTY: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit ConsumeStructuredBuffer
-// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// EMPTY-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit <undeserialized declarations> class ConsumeStructuredBuffer
// EMPTY-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
@@ -26,7 +26,7 @@ ConsumeStructuredBuffer<int> Buffer;
#endif
// CHECK: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit ConsumeStructuredBuffer
-// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// CHECK-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit class ConsumeStructuredBuffer definition
// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
diff --git a/clang/test/AST/HLSL/RWStructuredBuffer-AST.hlsl b/clang/test/AST/HLSL/RWStructuredBuffer-AST.hlsl
index 4a1e1d7570e5e9..5058eab40b1aeb 100644
--- a/clang/test/AST/HLSL/RWStructuredBuffer-AST.hlsl
+++ b/clang/test/AST/HLSL/RWStructuredBuffer-AST.hlsl
@@ -12,7 +12,7 @@
// instantiated specialization.
// EMPTY: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit RWStructuredBuffer
-// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// EMPTY-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit <undeserialized declarations> class RWStructuredBuffer
// EMPTY-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
@@ -26,7 +26,7 @@ RWStructuredBuffer<int> Buffer;
#endif
// CHECK: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit RWStructuredBuffer
-// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// CHECK-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit class RWStructuredBuffer definition
// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
diff --git a/clang/test/AST/HLSL/RasterizerOrderedStructuredBuffer-AST.hlsl b/clang/test/AST/HLSL/RasterizerOrderedStructuredBuffer-AST.hlsl
index f334e1bb6db3fc..bd05432a09e01c 100644
--- a/clang/test/AST/HLSL/RasterizerOrderedStructuredBuffer-AST.hlsl
+++ b/clang/test/AST/HLSL/RasterizerOrderedStructuredBuffer-AST.hlsl
@@ -12,7 +12,7 @@
// instantiated specialization.
// EMPTY: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit RasterizerOrderedStructuredBuffer
-// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// EMPTY-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// EMPTY-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit <undeserialized declarations> class RasterizerOrderedStructuredBuffer
// EMPTY-NEXT: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
@@ -26,7 +26,7 @@ RasterizerOrderedStructuredBuffer<int> Buffer;
#endif
// CHECK: ClassTemplateDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit RasterizerOrderedStructuredBuffer
-// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> class depth 0 index 0 element_type
+// CHECK-NEXT: TemplateTypeParmDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> typename depth 0 index 0 element_type
// CHECK-NEXT: CXXRecordDecl 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> <invalid sloc> implicit class RasterizerOrderedStructuredBuffer definition
// CHECK: FinalAttr 0x{{[0-9A-Fa-f]+}} <<invalid sloc>> Implicit final
More information about the cfe-commits
mailing list