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);
|
CodeCompleter->getCodeCompletionTUInfo(), CCC);
|
||||||
|
|
||||||
Results.EnterNewScope();
|
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
|
// FIXME: Make use of previous designators to mark any fields before those
|
||||||
// inaccessible, and also compute the next initializer priority.
|
// inaccessible, and also compute the next initializer priority.
|
||||||
ResultBuilder::Result Result(FD, Results.getBasePriority(FD));
|
ResultBuilder::Result Result(FD, Results.getBasePriority(FD));
|
||||||
|
|
|
@ -77,3 +77,11 @@ namespace signature_regression {
|
||||||
// CHECK-SIGNATURE-REGRESSION-NOT: OVERLOAD: [#int#]wrongFunction
|
// 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