@@ -2228,6 +2228,9 @@ ExpectedDecl ASTNodeImporter::VisitNamespaceDecl(NamespaceDecl *D) {
2228
2228
ExpectedSLoc BeginLocOrErr = import (D->getBeginLoc ());
2229
2229
if (!BeginLocOrErr)
2230
2230
return BeginLocOrErr.takeError ();
2231
+ ExpectedSLoc RBraceLocOrErr = import (D->getRBraceLoc ());
2232
+ if (!RBraceLocOrErr)
2233
+ return RBraceLocOrErr.takeError ();
2231
2234
2232
2235
// Create the "to" namespace, if needed.
2233
2236
NamespaceDecl *ToNamespace = MergeWithNamespace;
@@ -2237,6 +2240,7 @@ ExpectedDecl ASTNodeImporter::VisitNamespaceDecl(NamespaceDecl *D) {
2237
2240
*BeginLocOrErr, Loc, Name.getAsIdentifierInfo (),
2238
2241
/* PrevDecl=*/ nullptr ))
2239
2242
return ToNamespace;
2243
+ ToNamespace->setRBraceLoc (*RBraceLocOrErr);
2240
2244
ToNamespace->setLexicalDeclContext (LexicalDC);
2241
2245
LexicalDC->addDeclInternal (ToNamespace);
2242
2246
@@ -2545,9 +2549,10 @@ ExpectedDecl ASTNodeImporter::VisitEnumDecl(EnumDecl *D) {
2545
2549
SourceLocation ToBeginLoc;
2546
2550
NestedNameSpecifierLoc ToQualifierLoc;
2547
2551
QualType ToIntegerType;
2548
- if (auto Imp = importSeq (
2549
- D->getBeginLoc (), D->getQualifierLoc (), D->getIntegerType ()))
2550
- std::tie (ToBeginLoc, ToQualifierLoc, ToIntegerType) = *Imp;
2552
+ SourceRange ToBraceRange;
2553
+ if (auto Imp = importSeq (D->getBeginLoc (), D->getQualifierLoc (),
2554
+ D->getIntegerType (), D->getBraceRange ()))
2555
+ std::tie (ToBeginLoc, ToQualifierLoc, ToIntegerType, ToBraceRange) = *Imp;
2551
2556
else
2552
2557
return Imp.takeError ();
2553
2558
@@ -2561,6 +2566,7 @@ ExpectedDecl ASTNodeImporter::VisitEnumDecl(EnumDecl *D) {
2561
2566
2562
2567
D2->setQualifierInfo (ToQualifierLoc);
2563
2568
D2->setIntegerType (ToIntegerType);
2569
+ D2->setBraceRange (ToBraceRange);
2564
2570
D2->setAccess (D->getAccess ());
2565
2571
D2->setLexicalDeclContext (LexicalDC);
2566
2572
LexicalDC->addDeclInternal (D2);
@@ -2795,6 +2801,10 @@ ExpectedDecl ASTNodeImporter::VisitRecordDecl(RecordDecl *D) {
2795
2801
LexicalDC->addDeclInternal (D2);
2796
2802
}
2797
2803
2804
+ if (auto BraceRangeOrErr = import (D->getBraceRange ()))
2805
+ D2->setBraceRange (*BraceRangeOrErr);
2806
+ else
2807
+ return BraceRangeOrErr.takeError ();
2798
2808
if (auto QualifierLocOrErr = import (D->getQualifierLoc ()))
2799
2809
D2->setQualifierInfo (*QualifierLocOrErr);
2800
2810
else
@@ -5295,6 +5305,11 @@ ExpectedDecl ASTNodeImporter::VisitClassTemplateSpecializationDecl(
5295
5305
LexicalDC->addDeclInternal (D2);
5296
5306
}
5297
5307
5308
+ if (auto BraceRangeOrErr = import (D->getBraceRange ()))
5309
+ D2->setBraceRange (*BraceRangeOrErr);
5310
+ else
5311
+ return BraceRangeOrErr.takeError ();
5312
+
5298
5313
// Import the qualifier, if any.
5299
5314
if (auto LocOrErr = import (D->getQualifierLoc ()))
5300
5315
D2->setQualifierInfo (*LocOrErr);
@@ -6293,7 +6308,8 @@ ExpectedStmt ASTNodeImporter::VisitDeclRefExpr(DeclRefExpr *E) {
6293
6308
TemplateArgumentListInfo *ToResInfo = nullptr ;
6294
6309
if (E->hasExplicitTemplateArgs ()) {
6295
6310
if (Error Err =
6296
- ImportTemplateArgumentListInfo (E->template_arguments (), ToTAInfo))
6311
+ ImportTemplateArgumentListInfo (E->getLAngleLoc (), E->getRAngleLoc (),
6312
+ E->template_arguments (), ToTAInfo))
6297
6313
return std::move (Err);
6298
6314
ToResInfo = &ToTAInfo;
6299
6315
}
@@ -7369,20 +7385,19 @@ ExpectedStmt ASTNodeImporter::VisitCXXDependentScopeMemberExpr(
7369
7385
7370
7386
ExpectedStmt
7371
7387
ASTNodeImporter::VisitDependentScopeDeclRefExpr (DependentScopeDeclRefExpr *E) {
7372
- auto Imp = importSeq (
7373
- E->getQualifierLoc (), E->getTemplateKeywordLoc (), E-> getDeclName (),
7374
- E-> getExprLoc (), E->getLAngleLoc (), E->getRAngleLoc ());
7388
+ auto Imp = importSeq (E-> getQualifierLoc (), E-> getTemplateKeywordLoc (),
7389
+ E->getDeclName (), E->getNameInfo (). getLoc (),
7390
+ E->getLAngleLoc (), E->getRAngleLoc ());
7375
7391
if (!Imp)
7376
7392
return Imp.takeError ();
7377
7393
7378
7394
NestedNameSpecifierLoc ToQualifierLoc;
7379
- SourceLocation ToTemplateKeywordLoc, ToExprLoc , ToLAngleLoc, ToRAngleLoc;
7395
+ SourceLocation ToTemplateKeywordLoc, ToNameLoc , ToLAngleLoc, ToRAngleLoc;
7380
7396
DeclarationName ToDeclName;
7381
- std::tie (
7382
- ToQualifierLoc, ToTemplateKeywordLoc, ToDeclName, ToExprLoc,
7383
- ToLAngleLoc, ToRAngleLoc) = *Imp;
7397
+ std::tie (ToQualifierLoc, ToTemplateKeywordLoc, ToDeclName, ToNameLoc,
7398
+ ToLAngleLoc, ToRAngleLoc) = *Imp;
7384
7399
7385
- DeclarationNameInfo ToNameInfo (ToDeclName, ToExprLoc );
7400
+ DeclarationNameInfo ToNameInfo (ToDeclName, ToNameLoc );
7386
7401
if (Error Err = ImportDeclarationNameLoc (E->getNameInfo (), ToNameInfo))
7387
7402
return std::move (Err);
7388
7403
@@ -7447,7 +7462,7 @@ ASTNodeImporter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) {
7447
7462
else
7448
7463
return ToDOrErr.takeError ();
7449
7464
7450
- if (E->hasExplicitTemplateArgs () && E-> getTemplateKeywordLoc (). isValid () ) {
7465
+ if (E->hasExplicitTemplateArgs ()) {
7451
7466
TemplateArgumentListInfo ToTAInfo;
7452
7467
if (Error Err = ImportTemplateArgumentListInfo (
7453
7468
E->getLAngleLoc (), E->getRAngleLoc (), E->template_arguments (),
@@ -7501,8 +7516,9 @@ ASTNodeImporter::VisitUnresolvedMemberExpr(UnresolvedMemberExpr *E) {
7501
7516
TemplateArgumentListInfo ToTAInfo;
7502
7517
TemplateArgumentListInfo *ResInfo = nullptr ;
7503
7518
if (E->hasExplicitTemplateArgs ()) {
7504
- if (Error Err =
7505
- ImportTemplateArgumentListInfo (E->template_arguments (), ToTAInfo))
7519
+ TemplateArgumentListInfo FromTAInfo;
7520
+ E->copyTemplateArgumentsInto (FromTAInfo);
7521
+ if (Error Err = ImportTemplateArgumentListInfo (FromTAInfo, ToTAInfo))
7506
7522
return std::move (Err);
7507
7523
ResInfo = &ToTAInfo;
7508
7524
}
@@ -8315,8 +8331,14 @@ ASTImporter::Import(NestedNameSpecifierLoc FromNNS) {
8315
8331
return std::move (Err);
8316
8332
TypeSourceInfo *TSI = getToContext ().getTrivialTypeSourceInfo (
8317
8333
QualType (Spec->getAsType (), 0 ), ToTLoc);
8318
- Builder.Extend (getToContext (), ToLocalBeginLoc, TSI->getTypeLoc (),
8319
- ToLocalEndLoc);
8334
+ if (Kind == NestedNameSpecifier::TypeSpecWithTemplate)
8335
+ // ToLocalBeginLoc is here the location of the 'template' keyword.
8336
+ Builder.Extend (getToContext (), ToLocalBeginLoc, TSI->getTypeLoc (),
8337
+ ToLocalEndLoc);
8338
+ else
8339
+ // No location for 'template' keyword here.
8340
+ Builder.Extend (getToContext (), SourceLocation{}, TSI->getTypeLoc (),
8341
+ ToLocalEndLoc);
8320
8342
break ;
8321
8343
}
8322
8344
0 commit comments