Skip to content

Commit c4f8a62

Browse files
committed
[Clang][Sema] Make UnresolvedLookupExprs in class scope explicit specializations instantiation dependent
1 parent e106537 commit c4f8a62

File tree

12 files changed

+42
-32
lines changed

12 files changed

+42
-32
lines changed

clang/include/clang/AST/ExprCXX.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3229,7 +3229,7 @@ class UnresolvedLookupExpr final
32293229
const DeclarationNameInfo &NameInfo, bool RequiresADL,
32303230
const TemplateArgumentListInfo *TemplateArgs,
32313231
UnresolvedSetIterator Begin, UnresolvedSetIterator End,
3232-
bool KnownDependent);
3232+
bool KnownDependent, bool KnownInstantiationDependent);
32333233

32343234
UnresolvedLookupExpr(EmptyShell Empty, unsigned NumResults,
32353235
bool HasTemplateKWAndArgsInfo);
@@ -3248,7 +3248,7 @@ class UnresolvedLookupExpr final
32483248
NestedNameSpecifierLoc QualifierLoc,
32493249
const DeclarationNameInfo &NameInfo, bool RequiresADL,
32503250
UnresolvedSetIterator Begin, UnresolvedSetIterator End,
3251-
bool KnownDependent);
3251+
bool KnownDependent, bool KnownInstantiationDependent);
32523252

32533253
// After canonicalization, there may be dependent template arguments in
32543254
// CanonicalConverted But none of Args is dependent. When any of
@@ -3258,7 +3258,8 @@ class UnresolvedLookupExpr final
32583258
NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc,
32593259
const DeclarationNameInfo &NameInfo, bool RequiresADL,
32603260
const TemplateArgumentListInfo *Args, UnresolvedSetIterator Begin,
3261-
UnresolvedSetIterator End, bool KnownDependent);
3261+
UnresolvedSetIterator End, bool KnownDependent,
3262+
bool KnownInstantiationDependent);
32623263

32633264
static UnresolvedLookupExpr *CreateEmpty(const ASTContext &Context,
32643265
unsigned NumResults,

clang/lib/AST/ASTImporter.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8572,13 +8572,14 @@ ASTNodeImporter::VisitUnresolvedLookupExpr(UnresolvedLookupExpr *E) {
85728572
return UnresolvedLookupExpr::Create(
85738573
Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
85748574
*ToTemplateKeywordLocOrErr, ToNameInfo, E->requiresADL(), &ToTAInfo,
8575-
ToDecls.begin(), ToDecls.end(), KnownDependent);
8575+
ToDecls.begin(), ToDecls.end(), KnownDependent,
8576+
E->isInstantiationDependent());
85768577
}
85778578

85788579
return UnresolvedLookupExpr::Create(
85798580
Importer.getToContext(), *ToNamingClassOrErr, *ToQualifierLocOrErr,
85808581
ToNameInfo, E->requiresADL(), ToDecls.begin(), ToDecls.end(),
8581-
/*KnownDependent=*/E->isTypeDependent());
8582+
/*KnownDependent=*/E->isTypeDependent(), E->isInstantiationDependent());
85828583
}
85838584

85848585
ExpectedStmt

clang/lib/AST/ExprCXX.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -402,10 +402,11 @@ UnresolvedLookupExpr::UnresolvedLookupExpr(
402402
NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc,
403403
const DeclarationNameInfo &NameInfo, bool RequiresADL,
404404
const TemplateArgumentListInfo *TemplateArgs, UnresolvedSetIterator Begin,
405-
UnresolvedSetIterator End, bool KnownDependent)
405+
UnresolvedSetIterator End, bool KnownDependent,
406+
bool KnownInstantiationDependent)
406407
: OverloadExpr(UnresolvedLookupExprClass, Context, QualifierLoc,
407408
TemplateKWLoc, NameInfo, TemplateArgs, Begin, End,
408-
KnownDependent, false, false),
409+
KnownDependent, KnownInstantiationDependent, false),
409410
NamingClass(NamingClass) {
410411
UnresolvedLookupExprBits.RequiresADL = RequiresADL;
411412
}
@@ -420,33 +421,35 @@ UnresolvedLookupExpr *UnresolvedLookupExpr::Create(
420421
const ASTContext &Context, CXXRecordDecl *NamingClass,
421422
NestedNameSpecifierLoc QualifierLoc, const DeclarationNameInfo &NameInfo,
422423
bool RequiresADL, UnresolvedSetIterator Begin, UnresolvedSetIterator End,
423-
bool KnownDependent) {
424+
bool KnownDependent, bool KnownInstantiationDependent) {
424425
unsigned NumResults = End - Begin;
425426
unsigned Size = totalSizeToAlloc<DeclAccessPair, ASTTemplateKWAndArgsInfo,
426427
TemplateArgumentLoc>(NumResults, 0, 0);
427428
void *Mem = Context.Allocate(Size, alignof(UnresolvedLookupExpr));
428429
return new (Mem) UnresolvedLookupExpr(
429430
Context, NamingClass, QualifierLoc,
430431
/*TemplateKWLoc=*/SourceLocation(), NameInfo, RequiresADL,
431-
/*TemplateArgs=*/nullptr, Begin, End, KnownDependent);
432+
/*TemplateArgs=*/nullptr, Begin, End, KnownDependent,
433+
KnownInstantiationDependent);
432434
}
433435

434436
UnresolvedLookupExpr *UnresolvedLookupExpr::Create(
435437
const ASTContext &Context, CXXRecordDecl *NamingClass,
436438
NestedNameSpecifierLoc QualifierLoc, SourceLocation TemplateKWLoc,
437439
const DeclarationNameInfo &NameInfo, bool RequiresADL,
438440
const TemplateArgumentListInfo *Args, UnresolvedSetIterator Begin,
439-
UnresolvedSetIterator End, bool KnownDependent) {
441+
UnresolvedSetIterator End, bool KnownDependent,
442+
bool KnownInstantiationDependent) {
440443
unsigned NumResults = End - Begin;
441444
bool HasTemplateKWAndArgsInfo = Args || TemplateKWLoc.isValid();
442445
unsigned NumTemplateArgs = Args ? Args->size() : 0;
443446
unsigned Size = totalSizeToAlloc<DeclAccessPair, ASTTemplateKWAndArgsInfo,
444447
TemplateArgumentLoc>(
445448
NumResults, HasTemplateKWAndArgsInfo, NumTemplateArgs);
446449
void *Mem = Context.Allocate(Size, alignof(UnresolvedLookupExpr));
447-
return new (Mem) UnresolvedLookupExpr(Context, NamingClass, QualifierLoc,
448-
TemplateKWLoc, NameInfo, RequiresADL,
449-
Args, Begin, End, KnownDependent);
450+
return new (Mem) UnresolvedLookupExpr(
451+
Context, NamingClass, QualifierLoc, TemplateKWLoc, NameInfo, RequiresADL,
452+
Args, Begin, End, KnownDependent, KnownInstantiationDependent);
450453
}
451454

452455
UnresolvedLookupExpr *UnresolvedLookupExpr::CreateEmpty(

clang/lib/Sema/SemaCoroutine.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -820,7 +820,8 @@ ExprResult Sema::BuildOperatorCoawaitLookupExpr(Scope *S, SourceLocation Loc) {
820820
Expr *CoawaitOp = UnresolvedLookupExpr::Create(
821821
Context, /*NamingClass*/ nullptr, NestedNameSpecifierLoc(),
822822
DeclarationNameInfo(OpName, Loc), /*RequiresADL*/ true, Functions.begin(),
823-
Functions.end(), /*KnownDependent=*/false);
823+
Functions.end(), /*KnownDependent=*/false,
824+
/*KnownInstantiationDependent=*/false);
824825
assert(CoawaitOp);
825826
return CoawaitOp;
826827
}

clang/lib/Sema/SemaDecl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ Sema::NameClassification Sema::ClassifyName(Scope *S, CXXScopeSpec &SS,
12191219
return NameClassification::OverloadSet(UnresolvedLookupExpr::Create(
12201220
Context, Result.getNamingClass(), SS.getWithLocInContext(Context),
12211221
Result.getLookupNameInfo(), ADL, Result.begin(), Result.end(),
1222-
/*KnownDependent=*/false));
1222+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false));
12231223
}
12241224

12251225
ExprResult

clang/lib/Sema/SemaDeclCXX.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1289,7 +1289,7 @@ static bool checkTupleLikeDecomposition(Sema &S,
12891289
S.Context, nullptr, NestedNameSpecifierLoc(), SourceLocation(),
12901290
DeclarationNameInfo(GetDN, Loc), /*RequiresADL=*/true, &Args,
12911291
UnresolvedSetIterator(), UnresolvedSetIterator(),
1292-
/*KnownDependent=*/false);
1292+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false);
12931293

12941294
Expr *Arg = E.get();
12951295
E = S.BuildCallExpr(nullptr, Get, Loc, Arg, Loc);

clang/lib/Sema/SemaExpr.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3188,7 +3188,7 @@ ExprResult Sema::BuildDeclarationNameExpr(const CXXScopeSpec &SS,
31883188
UnresolvedLookupExpr *ULE = UnresolvedLookupExpr::Create(
31893189
Context, R.getNamingClass(), SS.getWithLocInContext(Context),
31903190
R.getLookupNameInfo(), NeedsADL, R.begin(), R.end(),
3191-
/*KnownDependent=*/false);
3191+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false);
31923192

31933193
return ULE;
31943194
}
@@ -17008,10 +17008,10 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
1700817008
if (!isa<ConstantExpr>(E))
1700917009
E = Result ? ConstantExpr::Create(Context, E, APValue(*Result))
1701017010
: ConstantExpr::Create(Context, E);
17011-
17011+
1701217012
if (Notes.empty())
1701317013
return E;
17014-
17014+
1701517015
// If our only note is the usual "invalid subexpression" note, just point
1701617016
// the caret at its location rather than producing an essentially
1701717017
// redundant note.
@@ -17020,7 +17020,7 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
1702017020
DiagLoc = Notes[0].first;
1702117021
Notes.clear();
1702217022
}
17023-
17023+
1702417024
if (getLangOpts().CPlusPlus) {
1702517025
if (!Diagnoser.Suppress) {
1702617026
Diagnoser.diagnoseNotICE(*this, DiagLoc) << E->getSourceRange();
@@ -17033,7 +17033,7 @@ Sema::VerifyIntegerConstantExpression(Expr *E, llvm::APSInt *Result,
1703317033
Diagnoser.diagnoseFold(*this, DiagLoc) << E->getSourceRange();
1703417034
for (const PartialDiagnosticAt &Note : Notes)
1703517035
Diag(Note.first, Note.second);
17036-
17036+
1703717037
return E;
1703817038
}
1703917039

clang/lib/Sema/SemaExprMember.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,8 @@ ExprResult Sema::BuildPossibleImplicitMemberExpr(
331331
return UnresolvedLookupExpr::Create(
332332
Context, R.getNamingClass(), SS.getWithLocInContext(Context),
333333
TemplateKWLoc, R.getLookupNameInfo(), /*RequiresADL=*/false,
334-
TemplateArgs, R.begin(), R.end(), /*KnownDependent=*/true);
334+
TemplateArgs, R.begin(), R.end(), /*KnownDependent=*/true,
335+
/*KnownInstantiationDependent=*/true);
335336

336337
case IMA_Error_StaticOrExplicitContext:
337338
case IMA_Error_Unrelated:

clang/lib/Sema/SemaOpenMP.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17852,7 +17852,8 @@ buildDeclareReductionRef(Sema &SemaRef, SourceLocation Loc, SourceRange Range,
1785217852
return UnresolvedLookupExpr::Create(
1785317853
SemaRef.Context, /*NamingClass=*/nullptr,
1785417854
ReductionIdScopeSpec.getWithLocInContext(SemaRef.Context), ReductionId,
17855-
/*ADL=*/true, ResSet.begin(), ResSet.end(), /*KnownDependent=*/false);
17855+
/*ADL=*/true, ResSet.begin(), ResSet.end(), /*KnownDependent=*/false,
17856+
/*KnownInstantiationDependent=*/false);
1785617857
}
1785717858
// Lookup inside the classes.
1785817859
// C++ [over.match.oper]p3:
@@ -20718,7 +20719,8 @@ static ExprResult buildUserDefinedMapperRef(Sema &SemaRef, Scope *S,
2071820719
return UnresolvedLookupExpr::Create(
2071920720
SemaRef.Context, /*NamingClass=*/nullptr,
2072020721
MapperIdScopeSpec.getWithLocInContext(SemaRef.Context), MapperId,
20721-
/*ADL=*/false, URS.begin(), URS.end(), /*KnownDependent=*/false);
20722+
/*ADL=*/false, URS.begin(), URS.end(), /*KnownDependent=*/false,
20723+
/*KnownInstantiationDependent=*/false);
2072220724
}
2072320725
SourceLocation Loc = MapperId.getLoc();
2072420726
// [OpenMP 5.0], 2.19.7.3 declare mapper Directive, Restrictions

clang/lib/Sema/SemaOverload.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14093,9 +14093,9 @@ ExprResult Sema::CreateUnresolvedLookupExpr(CXXRecordDecl *NamingClass,
1409314093
DeclarationNameInfo DNI,
1409414094
const UnresolvedSetImpl &Fns,
1409514095
bool PerformADL) {
14096-
return UnresolvedLookupExpr::Create(Context, NamingClass, NNSLoc, DNI,
14097-
PerformADL, Fns.begin(), Fns.end(),
14098-
/*KnownDependent=*/false);
14096+
return UnresolvedLookupExpr::Create(
14097+
Context, NamingClass, NNSLoc, DNI, PerformADL, Fns.begin(), Fns.end(),
14098+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false);
1409914099
}
1410014100

1410114101
ExprResult Sema::BuildCXXMemberCallExpr(Expr *E, NamedDecl *FoundDecl,

clang/lib/Sema/SemaTemplate.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4436,7 +4436,8 @@ ExprResult Sema::BuildTemplateIdExpr(const CXXScopeSpec &SS,
44364436
UnresolvedLookupExpr *ULE = UnresolvedLookupExpr::Create(
44374437
Context, R.getNamingClass(), SS.getWithLocInContext(Context),
44384438
TemplateKWLoc, R.getLookupNameInfo(), RequiresADL, TemplateArgs,
4439-
R.begin(), R.end(), KnownDependent);
4439+
R.begin(), R.end(), KnownDependent,
4440+
/*KnownInstantiationDependent=*/false);
44404441

44414442
// Model the templates with UnresolvedTemplateTy. The expression should then
44424443
// either be transformed in an instantiation or be diagnosed in

clang/lib/Sema/TreeTransform.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10540,7 +10540,7 @@ TreeTransform<Derived>::TransformOMPReductionClause(OMPReductionClause *C) {
1054010540
SemaRef.Context, /*NamingClass=*/nullptr,
1054110541
ReductionIdScopeSpec.getWithLocInContext(SemaRef.Context), NameInfo,
1054210542
/*ADL=*/true, Decls.begin(), Decls.end(),
10543-
/*KnownDependent=*/false));
10543+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false));
1054410544
} else
1054510545
UnresolvedReductions.push_back(nullptr);
1054610546
}
@@ -10587,7 +10587,7 @@ OMPClause *TreeTransform<Derived>::TransformOMPTaskReductionClause(
1058710587
SemaRef.Context, /*NamingClass=*/nullptr,
1058810588
ReductionIdScopeSpec.getWithLocInContext(SemaRef.Context), NameInfo,
1058910589
/*ADL=*/true, Decls.begin(), Decls.end(),
10590-
/*KnownDependent=*/false));
10590+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false));
1059110591
} else
1059210592
UnresolvedReductions.push_back(nullptr);
1059310593
}
@@ -10633,7 +10633,7 @@ TreeTransform<Derived>::TransformOMPInReductionClause(OMPInReductionClause *C) {
1063310633
SemaRef.Context, /*NamingClass=*/nullptr,
1063410634
ReductionIdScopeSpec.getWithLocInContext(SemaRef.Context), NameInfo,
1063510635
/*ADL=*/true, Decls.begin(), Decls.end(),
10636-
/*KnownDependent=*/false));
10636+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false));
1063710637
} else
1063810638
UnresolvedReductions.push_back(nullptr);
1063910639
}
@@ -10815,7 +10815,7 @@ bool transformOMPMappableExprListClause(
1081510815
TT.getSema().Context, /*NamingClass=*/nullptr,
1081610816
MapperIdScopeSpec.getWithLocInContext(TT.getSema().Context),
1081710817
MapperIdInfo, /*ADL=*/true, Decls.begin(), Decls.end(),
10818-
/*KnownDependent=*/false));
10818+
/*KnownDependent=*/false, /*KnownInstantiationDependent=*/false));
1081910819
} else {
1082010820
UnresolvedMappers.push_back(nullptr);
1082110821
}

0 commit comments

Comments
 (0)