@@ -36,23 +36,25 @@ namespace {
36
36
struct TemplateParameterListBuilder ;
37
37
38
38
class BuiltinTypeDeclBuilder {
39
- CXXRecordDecl *Record = nullptr ;
40
39
ClassTemplateDecl *Template = nullptr ;
41
40
ClassTemplateDecl *PrevTemplate = nullptr ;
42
41
NamespaceDecl *HLSLNamespace = nullptr ;
43
42
llvm::StringMap<FieldDecl *> Fields;
44
43
45
44
public:
45
+ Sema &SemaRef;
46
+ CXXRecordDecl *Record = nullptr ;
46
47
friend struct TemplateParameterListBuilder ;
47
48
48
- BuiltinTypeDeclBuilder (CXXRecordDecl *R) : Record(R) {
49
+ BuiltinTypeDeclBuilder (Sema &SemaRef, CXXRecordDecl *R)
50
+ : SemaRef(SemaRef), Record(R) {
49
51
Record->startDefinition ();
50
52
Template = Record->getDescribedClassTemplate ();
51
53
}
52
54
53
55
BuiltinTypeDeclBuilder (Sema &SemaRef, NamespaceDecl *Namespace,
54
56
StringRef Name)
55
- : SemaRef(SemaRef ), HLSLNamespace(Namespace ) {
57
+ : HLSLNamespace(Namespace ), SemaRef(SemaRef ) {
56
58
ASTContext &AST = SemaRef.getASTContext ();
57
59
IdentifierInfo &II = AST.Idents .get (Name, tok::TokenKind::identifier);
58
60
@@ -553,10 +555,10 @@ struct BuiltinTypeMethodBuilder {
553
555
554
556
// create method decl
555
557
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 ());
560
562
561
563
// create params & set them to the function prototype
562
564
SmallVector<ParmVarDecl *> ParmDecls;
@@ -875,8 +877,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
875
877
ConceptDecl *TypedBufferConcept =
876
878
constructTypedBufferConceptDecl (*SemaPtr, HLSLNamespace);
877
879
Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RWBuffer" )
878
- .addSimpleTemplateParams (*SemaPtr, {" element_type" },
879
- TypedBufferConcept)
880
+ .addSimpleTemplateParams ({" element_type" }, TypedBufferConcept)
880
881
.finalizeForwardDeclaration ();
881
882
882
883
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
@@ -889,7 +890,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
889
890
890
891
Decl =
891
892
BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RasterizerOrderedBuffer" )
892
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
893
+ .addSimpleTemplateParams ({" element_type" })
893
894
.finalizeForwardDeclaration ();
894
895
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
895
896
setupBufferType (Decl, *SemaPtr, ResourceClass::UAV,
@@ -900,7 +901,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
900
901
});
901
902
902
903
Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " StructuredBuffer" )
903
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
904
+ .addSimpleTemplateParams ({" element_type" })
904
905
.finalizeForwardDeclaration ();
905
906
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
906
907
setupBufferType (Decl, *SemaPtr, ResourceClass::SRV, ResourceKind::RawBuffer,
@@ -910,7 +911,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
910
911
});
911
912
912
913
Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " RWStructuredBuffer" )
913
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
914
+ .addSimpleTemplateParams ({" element_type" })
914
915
.finalizeForwardDeclaration ();
915
916
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
916
917
setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -923,7 +924,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
923
924
924
925
Decl =
925
926
BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " AppendStructuredBuffer" )
926
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
927
+ .addSimpleTemplateParams ({" element_type" })
927
928
.finalizeForwardDeclaration ();
928
929
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
929
930
setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -933,7 +934,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
933
934
934
935
Decl =
935
936
BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace, " ConsumeStructuredBuffer" )
936
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
937
+ .addSimpleTemplateParams ({" element_type" })
937
938
.finalizeForwardDeclaration ();
938
939
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
939
940
setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
@@ -943,7 +944,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
943
944
944
945
Decl = BuiltinTypeDeclBuilder (*SemaPtr, HLSLNamespace,
945
946
" RasterizerOrderedStructuredBuffer" )
946
- .addSimpleTemplateParams (*SemaPtr, {" element_type" })
947
+ .addSimpleTemplateParams ({" element_type" })
947
948
.finalizeForwardDeclaration ();
948
949
onCompletion (Decl, [this ](CXXRecordDecl *Decl) {
949
950
setupBufferType (Decl, *SemaPtr, ResourceClass::UAV, ResourceKind::RawBuffer,
0 commit comments