@@ -36,23 +36,25 @@ namespace {
3636struct TemplateParameterListBuilder ;
3737
3838class BuiltinTypeDeclBuilder {
39- CXXRecordDecl *Record = nullptr ;
4039 ClassTemplateDecl *Template = nullptr ;
4140 ClassTemplateDecl *PrevTemplate = nullptr ;
4241 NamespaceDecl *HLSLNamespace = nullptr ;
4342 llvm::StringMap<FieldDecl *> Fields;
4443
4544public:
45+ Sema &SemaRef;
46+ CXXRecordDecl *Record = nullptr ;
4647 friend struct TemplateParameterListBuilder ;
4748
48- BuiltinTypeDeclBuilder (CXXRecordDecl *R) : Record(R) {
49+ BuiltinTypeDeclBuilder (Sema &SemaRef, CXXRecordDecl *R)
50+ : SemaRef(SemaRef), Record(R) {
4951 Record->startDefinition ();
5052 Template = Record->getDescribedClassTemplate ();
5153 }
5254
5355 BuiltinTypeDeclBuilder (Sema &SemaRef, NamespaceDecl *Namespace,
5456 StringRef Name)
55- : SemaRef(SemaRef ), HLSLNamespace(Namespace ) {
57+ : HLSLNamespace(Namespace ), SemaRef(SemaRef ) {
5658 ASTContext &AST = SemaRef.getASTContext ();
5759 IdentifierInfo &II = AST.Idents .get (Name, tok::TokenKind::identifier);
5860
@@ -553,10 +555,10 @@ struct BuiltinTypeMethodBuilder {
553555
554556 // create method decl
555557 auto *TSInfo = AST.getTrivialTypeSourceInfo (MethodTy, SourceLocation ());
556- Method =
557- CXXMethodDecl::Create ( AST, DeclBuilder.Record , SourceLocation (),
558- NameInfo, MethodTy, TSInfo, SC_None, false , false ,
559- ConstexprSpecKind::Unspecified, SourceLocation ());
558+ Method = CXXMethodDecl::Create (
559+ AST, DeclBuilder.finalizeForwardDeclaration () , SourceLocation (),
560+ NameInfo, MethodTy, TSInfo, SC_None, false , false ,
561+ ConstexprSpecKind::Unspecified, SourceLocation ());
560562
561563 // create params & set them to the function prototype
562564 SmallVector<ParmVarDecl *> ParmDecls;
@@ -875,8 +877,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
875877 ConceptDecl *TypedBufferConcept =
876878 constructTypedBufferConceptDecl (*SemaPtr, HLSLNamespace);
877879 Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RWBuffer" )
878- .addSimpleTemplateParams (*SemaPtr, {" element_type" },
879- TypedBufferConcept)
880+ .addSimpleTemplateParams ({" element_type" }, TypedBufferConcept)
880881 .finalizeForwardDeclaration ();
881882
882883 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
@@ -889,7 +890,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
889890
890891 Decl =
891892 BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RasterizerOrderedBuffer" )
892- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
893+ .addSimpleTemplateParams ({" element_type" })
893894 .finalizeForwardDeclaration ();
894895 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
895896 setupBufferType (Decl, *SemaPtr, ResourceClass::UAV,
@@ -900,7 +901,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
900901 });
901902
902903 Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " StructuredBuffer" )
903- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
904+ .addSimpleTemplateParams ({" element_type" })
904905 .finalizeForwardDeclaration ();
905906 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
906907 setupBufferType (Decl, *SemaPtr, ResourceClass::SRV, ResourceKind::RawBuffer,
@@ -910,7 +911,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
910911 });
911912
912913 Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RWStructuredBuffer" )
913- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
914+ .addSimpleTemplateParams ({" element_type" })
914915 .finalizeForwardDeclaration ();
915916 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
916917 setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -923,7 +924,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
923924
924925 Decl =
925926 BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " AppendStructuredBuffer" )
926- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
927+ .addSimpleTemplateParams ({" element_type" })
927928 .finalizeForwardDeclaration ();
928929 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
929930 setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -933,7 +934,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
933934
934935 Decl =
935936 BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " ConsumeStructuredBuffer" )
936- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
937+ .addSimpleTemplateParams ({" element_type" })
937938 .finalizeForwardDeclaration ();
938939 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
939940 setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -943,7 +944,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
943944
944945 Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace,
945946 " RasterizerOrderedStructuredBuffer" )
946- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
947+ .addSimpleTemplateParams ({" element_type" })
947948 .finalizeForwardDeclaration ();
948949 onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
949950 setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
0 commit comments