Skip to content

Commit bdff294

Browse files
Reimplement getAsRecordDecl() using HeuristicResolver
1 parent 6301bdb commit bdff294

File tree

2 files changed

+7
-22
lines changed

2 files changed

+7
-22
lines changed

clang/lib/Sema/SemaCodeComplete.cpp

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5350,26 +5350,9 @@ AddRecordMembersCompletionResults(Sema &SemaRef, ResultBuilder &Results,
53505350
// instantiation/specialization yet, e.g. dependent code.
53515351
static RecordDecl *getAsRecordDecl(QualType BaseType,
53525352
HeuristicResolver &Resolver) {
5353-
BaseType = BaseType.getNonReferenceType();
5354-
if (auto *RD = BaseType->getAsRecordDecl()) {
5355-
if (const auto *CTSD =
5356-
llvm::dyn_cast<ClassTemplateSpecializationDecl>(RD)) {
5357-
// Template might not be instantiated yet, fall back to primary template
5358-
// in such cases.
5359-
if (CTSD->getTemplateSpecializationKind() == TSK_Undeclared)
5360-
RD = CTSD->getSpecializedTemplate()->getTemplatedDecl();
5361-
}
5362-
return RD;
5363-
}
5364-
5365-
if (const auto *TST = BaseType->getAs<TemplateSpecializationType>()) {
5366-
if (const auto *TD = dyn_cast_or_null<ClassTemplateDecl>(
5367-
TST->getTemplateName().getAsTemplateDecl())) {
5368-
return TD->getTemplatedDecl();
5369-
}
5370-
}
5371-
5372-
return nullptr;
5353+
BaseType = Resolver.simplifyType(BaseType, nullptr, /*UnwrapPointer=*/false);
5354+
return dyn_cast_if_present<RecordDecl>(
5355+
Resolver.resolveTypeToTagDecl(BaseType));
53735356
}
53745357

53755358
namespace {

clang/test/CodeCompletion/member-access.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,9 @@ using Alias = S<T>;
431431
template <typename T>
432432
void f(Alias<T> s) {
433433
s.a.b;
434-
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:433:7 %s -o - | FileCheck -check-prefix=CHECK-TEMPLATE-ALIAS %s
435-
// CHECK-TEMPLATE-ALIAS: [#int#]b
434+
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:433:5 %s -o - | FileCheck -check-prefix=CHECK-TEMPLATE-ALIAS %s
435+
// CHECK-TEMPLATE-ALIAS: [#A#]a
436+
// RUN: %clang_cc1 -fsyntax-only -code-completion-at=%s:433:7 %s -o - | FileCheck -check-prefix=CHECK-TEMPLATE-ALIAS-NESTED %s
437+
// CHECK-TEMPLATE-ALIAS-NESTED: [#int#]b
436438
}
437439
}

0 commit comments

Comments
 (0)