@@ -308,17 +308,18 @@ struct BuiltinTypeDeclBuilder {
308
308
return *this;
309
309
}
310
310
311
- TemplateParameterListBuilder addTemplateArgumentList();
312
- BuiltinTypeDeclBuilder &addSimpleTemplateParams(ArrayRef<StringRef> Names);
311
+ TemplateParameterListBuilder addTemplateArgumentList(Sema &S);
312
+ BuiltinTypeDeclBuilder &addSimpleTemplateParams(Sema &S,
313
+ ArrayRef<StringRef> Names);
313
314
};
314
315
315
316
struct TemplateParameterListBuilder {
316
317
BuiltinTypeDeclBuilder &Builder;
317
- ASTContext &AST ;
318
+ Sema &S ;
318
319
llvm::SmallVector<NamedDecl *> Params;
319
320
320
- TemplateParameterListBuilder(BuiltinTypeDeclBuilder &RB)
321
- : Builder(RB), AST(RB.Record->getASTContext() ) {}
321
+ TemplateParameterListBuilder(Sema &S, BuiltinTypeDeclBuilder &RB)
322
+ : Builder(RB), S(S ) {}
322
323
323
324
~TemplateParameterListBuilder() { finalizeTemplateArgs(); }
324
325
@@ -328,12 +329,15 @@ struct TemplateParameterListBuilder {
328
329
return *this;
329
330
unsigned Position = static_cast<unsigned>(Params.size());
330
331
auto *Decl = TemplateTypeParmDecl::Create(
331
- AST , Builder.Record->getDeclContext(), SourceLocation(),
332
+ S.Context , Builder.Record->getDeclContext(), SourceLocation(),
332
333
SourceLocation(), /* TemplateDepth */ 0, Position,
333
- &AST.Idents.get(Name, tok::TokenKind::identifier), /* Typename */ false,
334
+ &S.Context.Idents.get(Name, tok::TokenKind::identifier),
335
+ /* Typename */ false,
334
336
/* ParameterPack */ false);
335
337
if (!DefaultValue.isNull())
336
- Decl->setDefaultArgument(AST.getTrivialTypeSourceInfo(DefaultValue));
338
+ Decl->setDefaultArgument(
339
+ S.Context, S.getTrivialTemplateArgumentLoc(DefaultValue, QualType(),
340
+ SourceLocation()));
337
341
338
342
Params.emplace_back(Decl);
339
343
return *this;
@@ -342,11 +346,11 @@ struct TemplateParameterListBuilder {
342
346
BuiltinTypeDeclBuilder &finalizeTemplateArgs() {
343
347
if (Params.empty())
344
348
return Builder;
345
- auto *ParamList =
346
- TemplateParameterList::Create(AST, SourceLocation(), SourceLocation() ,
347
- Params, SourceLocation(), nullptr);
349
+ auto *ParamList = TemplateParameterList::Create(S.Context, SourceLocation(),
350
+ SourceLocation(), Params ,
351
+ SourceLocation(), nullptr);
348
352
Builder.Template = ClassTemplateDecl::Create(
349
- AST , Builder.Record->getDeclContext(), SourceLocation(),
353
+ S.Context , Builder.Record->getDeclContext(), SourceLocation(),
350
354
DeclarationName(Builder.Record->getIdentifier()), ParamList,
351
355
Builder.Record);
352
356
Builder.Record->setDescribedClassTemplate(Builder.Template);
@@ -359,20 +363,22 @@ struct TemplateParameterListBuilder {
359
363
Params.clear();
360
364
361
365
QualType T = Builder.Template->getInjectedClassNameSpecialization();
362
- T = AST .getInjectedClassNameType(Builder.Record, T);
366
+ T = S.Context .getInjectedClassNameType(Builder.Record, T);
363
367
364
368
return Builder;
365
369
}
366
370
};
367
371
} // namespace
368
372
369
- TemplateParameterListBuilder BuiltinTypeDeclBuilder::addTemplateArgumentList() {
370
- return TemplateParameterListBuilder(*this);
373
+ TemplateParameterListBuilder
374
+ BuiltinTypeDeclBuilder::addTemplateArgumentList(Sema &S) {
375
+ return TemplateParameterListBuilder(S, *this);
371
376
}
372
377
373
378
BuiltinTypeDeclBuilder &
374
- BuiltinTypeDeclBuilder::addSimpleTemplateParams(ArrayRef<StringRef> Names) {
375
- TemplateParameterListBuilder Builder = this->addTemplateArgumentList();
379
+ BuiltinTypeDeclBuilder::addSimpleTemplateParams(Sema &S,
380
+ ArrayRef<StringRef> Names) {
381
+ TemplateParameterListBuilder Builder = this->addTemplateArgumentList(S);
376
382
for (StringRef Name : Names)
377
383
Builder.addTypeParameter(Name);
378
384
return Builder.finalizeTemplateArgs();
@@ -426,7 +432,9 @@ void HLSLExternalSemaSource::defineHLSLVectorAlias() {
426
432
auto *TypeParam = TemplateTypeParmDecl::Create(
427
433
AST, HLSLNamespace, SourceLocation(), SourceLocation(), 0, 0,
428
434
&AST.Idents.get("element", tok::TokenKind::identifier), false, false);
429
- TypeParam->setDefaultArgument(AST.getTrivialTypeSourceInfo(AST.FloatTy));
435
+ TypeParam->setDefaultArgument(
436
+ AST, SemaPtr->getTrivialTemplateArgumentLoc(
437
+ TemplateArgument(AST.FloatTy), QualType(), SourceLocation()));
430
438
431
439
TemplateParams.emplace_back(TypeParam);
432
440
@@ -492,7 +500,7 @@ static BuiltinTypeDeclBuilder setupBufferType(CXXRecordDecl *Decl, Sema &S,
492
500
void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
493
501
CXXRecordDecl *Decl;
494
502
Decl = BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "RWBuffer")
495
- .addSimpleTemplateParams({"element_type"})
503
+ .addSimpleTemplateParams(*SemaPtr, {"element_type"})
496
504
.Record;
497
505
onCompletion(Decl, [this](CXXRecordDecl *Decl) {
498
506
setupBufferType(Decl, *SemaPtr, ResourceClass::UAV,
@@ -503,7 +511,7 @@ void HLSLExternalSemaSource::defineHLSLTypesWithForwardDeclarations() {
503
511
504
512
Decl =
505
513
BuiltinTypeDeclBuilder(*SemaPtr, HLSLNamespace, "RasterizerOrderedBuffer")
506
- .addSimpleTemplateParams({"element_type"})
514
+ .addSimpleTemplateParams(*SemaPtr, {"element_type"})
507
515
.Record;
508
516
onCompletion(Decl, [this](CXXRecordDecl *Decl) {
509
517
setupBufferType(Decl, *SemaPtr, ResourceClass::UAV,
0 commit comments