forked from OSchip/llvm-project
[CodeCompletion] Complete designators for fields in anonymous structs/unions
Fixes https://github.com/clangd/clangd/issues/836 Differential Revision: https://reviews.llvm.org/D116717
This commit is contained in:
parent
ed7ae1af72
commit
bbf234b56a
|
@ -6344,7 +6344,15 @@ void Sema::CodeCompleteDesignator(QualType BaseType,
|
|||
CodeCompleter->getCodeCompletionTUInfo(), CCC);
|
||||
|
||||
Results.EnterNewScope();
|
||||
for (const auto *FD : RD->fields()) {
|
||||
for (const Decl *D : RD->decls()) {
|
||||
const FieldDecl *FD;
|
||||
if (auto *IFD = dyn_cast<IndirectFieldDecl>(D))
|
||||
FD = IFD->getAnonField();
|
||||
else if (auto *DFD = dyn_cast<FieldDecl>(D))
|
||||
FD = DFD;
|
||||
else
|
||||
continue;
|
||||
|
||||
// FIXME: Make use of previous designators to mark any fields before those
|
||||
// inaccessible, and also compute the next initializer priority.
|
||||
ResultBuilder::Result Result(FD, Results.getBasePriority(FD));
|
||||
|
|
|
@ -77,3 +77,11 @@ namespace signature_regression {
|
|||
// CHECK-SIGNATURE-REGRESSION-NOT: OVERLOAD: [#int#]wrongFunction
|
||||
}
|
||||
|
||||
struct WithAnon {
|
||||
int outer;
|
||||
struct { int inner; };
|
||||
};
|
||||
auto TestWithAnon = WithAnon { .inner = 2 };
|
||||
// RUN: %clang_cc1 -fsyntax-only -code-completion-patterns -code-completion-at=%s:84:33 %s -o - -std=c++2a | FileCheck -check-prefix=CHECK-CC5 %s
|
||||
// CHECK-CC5: COMPLETION: inner : [#int#]inner
|
||||
// CHECK-CC5: COMPLETION: outer : [#int#]outer
|
||||
|
|
Loading…
Reference in New Issue