@@ -436,15 +436,17 @@ void PreferredTypeBuilder::enterVariableInit(SourceLocation Tok, Decl *D) {
436436 ExpectedLoc = Tok;
437437}
438438
439- static QualType getDesignatedType (QualType BaseType, const Designation &Desig);
439+ static QualType getDesignatedType (QualType BaseType, const Designation &Desig,
440+ HeuristicResolver &Resolver);
440441
441442void PreferredTypeBuilder::enterDesignatedInitializer (SourceLocation Tok,
442443 QualType BaseType,
443444 const Designation &D) {
444445 if (!Enabled)
445446 return ;
446447 ComputeType = nullptr ;
447- Type = getDesignatedType (BaseType, D);
448+ HeuristicResolver Resolver (*Ctx);
449+ Type = getDesignatedType (BaseType, D, Resolver);
448450 ExpectedLoc = Tok;
449451}
450452
@@ -5346,7 +5348,8 @@ AddRecordMembersCompletionResults(Sema &SemaRef, ResultBuilder &Results,
53465348// Returns the RecordDecl inside the BaseType, falling back to primary template
53475349// in case of specializations. Since we might not have a decl for the
53485350// instantiation/specialization yet, e.g. dependent code.
5349- static RecordDecl *getAsRecordDecl (QualType BaseType) {
5351+ static RecordDecl *getAsRecordDecl (QualType BaseType,
5352+ HeuristicResolver &Resolver) {
53505353 BaseType = BaseType.getNonReferenceType ();
53515354 if (auto *RD = BaseType->getAsRecordDecl ()) {
53525355 if (const auto *CTSD =
@@ -5911,7 +5914,7 @@ void SemaCodeCompletion::CodeCompleteMemberReferenceExpr(
59115914 }
59125915 }
59135916
5914- if (RecordDecl *RD = getAsRecordDecl (BaseType)) {
5917+ if (RecordDecl *RD = getAsRecordDecl (BaseType, Resolver )) {
59155918 AddRecordMembersCompletionResults (SemaRef, Results, S, BaseType, BaseKind,
59165919 RD, std::move (AccessOpFixIt));
59175920 } else if (const auto *TTPT =
@@ -6674,7 +6677,8 @@ QualType SemaCodeCompletion::ProduceTemplateArgumentSignatureHelp(
66746677 /* Braced=*/ false );
66756678}
66766679
6677- static QualType getDesignatedType (QualType BaseType, const Designation &Desig) {
6680+ static QualType getDesignatedType (QualType BaseType, const Designation &Desig,
6681+ HeuristicResolver &Resolver) {
66786682 for (unsigned I = 0 ; I < Desig.getNumDesignators (); ++I) {
66796683 if (BaseType.isNull ())
66806684 break ;
@@ -6685,7 +6689,7 @@ static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
66856689 NextType = BaseType->getAsArrayTypeUnsafe ()->getElementType ();
66866690 } else {
66876691 assert (D.isFieldDesignator ());
6688- auto *RD = getAsRecordDecl (BaseType);
6692+ auto *RD = getAsRecordDecl (BaseType, Resolver );
66896693 if (RD && RD->isCompleteDefinition ()) {
66906694 for (const auto *Member : RD->lookup (D.getFieldDecl ()))
66916695 if (const FieldDecl *FD = llvm::dyn_cast<FieldDecl>(Member)) {
@@ -6701,10 +6705,10 @@ static QualType getDesignatedType(QualType BaseType, const Designation &Desig) {
67016705
67026706void SemaCodeCompletion::CodeCompleteDesignator (
67036707 QualType BaseType, llvm::ArrayRef<Expr *> InitExprs, const Designation &D) {
6704- BaseType = getDesignatedType (BaseType, D);
6708+ BaseType = getDesignatedType (BaseType, D, Resolver );
67056709 if (BaseType.isNull ())
67066710 return ;
6707- const auto *RD = getAsRecordDecl (BaseType);
6711+ const auto *RD = getAsRecordDecl (BaseType, Resolver );
67086712 if (!RD || RD->fields ().empty ())
67096713 return ;
67106714
0 commit comments