@@ -436,15 +436,17 @@ void PreferredTypeBuilder::enterVariableInit(SourceLocation Tok, Decl *D) {
436
436
ExpectedLoc = Tok;
437
437
}
438
438
439
- static QualType getDesignatedType (QualType BaseType, const Designation &Desig);
439
+ static QualType getDesignatedType (QualType BaseType, const Designation &Desig,
440
+ HeuristicResolver &Resolver);
440
441
441
442
void PreferredTypeBuilder::enterDesignatedInitializer (SourceLocation Tok,
442
443
QualType BaseType,
443
444
const Designation &D) {
444
445
if (!Enabled)
445
446
return ;
446
447
ComputeType = nullptr ;
447
- Type = getDesignatedType (BaseType, D);
448
+ HeuristicResolver Resolver (*Ctx);
449
+ Type = getDesignatedType (BaseType, D, Resolver);
448
450
ExpectedLoc = Tok;
449
451
}
450
452
@@ -5346,7 +5348,8 @@ AddRecordMembersCompletionResults(Sema &SemaRef, ResultBuilder &Results,
5346
5348
// Returns the RecordDecl inside the BaseType, falling back to primary template
5347
5349
// in case of specializations. Since we might not have a decl for the
5348
5350
// instantiation/specialization yet, e.g. dependent code.
5349
- static RecordDecl *getAsRecordDecl (QualType BaseType) {
5351
+ static RecordDecl *getAsRecordDecl (QualType BaseType,
5352
+ HeuristicResolver &Resolver) {
5350
5353
BaseType = BaseType.getNonReferenceType ();
5351
5354
if (auto *RD = BaseType->getAsRecordDecl ()) {
5352
5355
if (const auto *CTSD =
@@ -5911,7 +5914,7 @@ void SemaCodeCompletion::CodeCompleteMemberReferenceExpr(
5911
5914
}
5912
5915
}
5913
5916
5914
- if (RecordDecl *RD = getAsRecordDecl (BaseType)) {
5917
+ if (RecordDecl *RD = getAsRecordDecl (BaseType, Resolver )) {
5915
5918
AddRecordMembersCompletionResults (SemaRef, Results, S, BaseType, BaseKind,
5916
5919
RD, std::move (AccessOpFixIt));
5917
5920
} else if (const auto *TTPT =
@@ -6674,7 +6677,8 @@ QualType SemaCodeCompletion::ProduceTemplateArgumentSignatureHelp(
6674
6677
/* Braced=*/ false );
6675
6678
}
6676
6679
6677
- static QualType getDesignatedType (QualType BaseType, const Designation &Desig) {
6680
+ static QualType getDesignatedType (QualType BaseType, const Designation &Desig,
6681
+ HeuristicResolver &Resolver) {
6678
6682
for (unsigned I = 0 ; I < Desig.getNumDesignators (); ++I) {
6679
6683
if (BaseType.isNull ())
6680
6684
break ;
@@ -6685,7 +6689,7 @@ static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
6685
6689
NextType = BaseType->getAsArrayTypeUnsafe ()->getElementType ();
6686
6690
} else {
6687
6691
assert (D.isFieldDesignator ());
6688
- auto *RD = getAsRecordDecl (BaseType);
6692
+ auto *RD = getAsRecordDecl (BaseType, Resolver );
6689
6693
if (RD && RD->isCompleteDefinition ()) {
6690
6694
for (const auto *Member : RD->lookup (D.getFieldDecl ()))
6691
6695
if (const FieldDecl *FD = llvm::dyn_cast<FieldDecl>(Member)) {
@@ -6701,10 +6705,10 @@ static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
6701
6705
6702
6706
void SemaCodeCompletion::CodeCompleteDesignator (
6703
6707
QualType BaseType, llvm::ArrayRef<Expr *> InitExprs, const Designation &D) {
6704
- BaseType = getDesignatedType (BaseType, D);
6708
+ BaseType = getDesignatedType (BaseType, D, Resolver );
6705
6709
if (BaseType.isNull ())
6706
6710
return ;
6707
- const auto *RD = getAsRecordDecl (BaseType);
6711
+ const auto *RD = getAsRecordDecl (BaseType, Resolver );
6708
6712
if (!RD || RD->fields ().empty ())
6709
6713
return ;
6710
6714
0 commit comments