sammccall created this revision. sammccall added a reviewer: kadircet. Herald added a subscriber: usaxena95. sammccall requested review of this revision. Herald added subscribers: cfe-commits, ilya-biryukov. Herald added a project: clang.
Fixes https://github.com/clangd/clangd/issues/836 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D116717 Files: clang/lib/Sema/SemaCodeComplete.cpp clang/test/CodeCompletion/desig-init.cpp Index: clang/test/CodeCompletion/desig-init.cpp =================================================================== --- clang/test/CodeCompletion/desig-init.cpp +++ clang/test/CodeCompletion/desig-init.cpp @@ -77,3 +77,11 @@ // 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 Index: clang/lib/Sema/SemaCodeComplete.cpp =================================================================== --- clang/lib/Sema/SemaCodeComplete.cpp +++ clang/lib/Sema/SemaCodeComplete.cpp @@ -6344,7 +6344,15 @@ 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));
Index: clang/test/CodeCompletion/desig-init.cpp =================================================================== --- clang/test/CodeCompletion/desig-init.cpp +++ clang/test/CodeCompletion/desig-init.cpp @@ -77,3 +77,11 @@ // 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 Index: clang/lib/Sema/SemaCodeComplete.cpp =================================================================== --- clang/lib/Sema/SemaCodeComplete.cpp +++ clang/lib/Sema/SemaCodeComplete.cpp @@ -6344,7 +6344,15 @@ 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));
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits