File tree Expand file tree Collapse file tree 2 files changed +41
-4
lines changed
test/SourceKit/CodeComplete Expand file tree Collapse file tree 2 files changed +41
-4
lines changed Original file line number Diff line number Diff line change @@ -1686,11 +1686,24 @@ bool ClangImporter::Implementation::importHeader(
16861686
16871687 // We can't do this as we're parsing because we may want to resolve naming
16881688 // conflicts between the things we've parsed.
1689- for (auto group : allParsedDecls)
1690- for (auto *D : group)
1691- if (auto named = dyn_cast<clang::NamedDecl>(D))
1692- addEntryToLookupTable (*BridgingHeaderLookupTable, named,
1689+
1690+ std::function<void (clang::Decl *)> visit = [&](clang::Decl *decl) {
1691+ // Iterate into extern "C" {} type declarations.
1692+ if (auto linkageDecl = dyn_cast<clang::LinkageSpecDecl>(decl)) {
1693+ for (auto *decl : linkageDecl->noload_decls ()) {
1694+ visit (decl);
1695+ }
1696+ }
1697+ if (auto named = dyn_cast<clang::NamedDecl>(decl)) {
1698+ addEntryToLookupTable (*BridgingHeaderLookupTable, named,
16931699 getNameImporter ());
1700+ }
1701+ };
1702+ for (auto group : allParsedDecls) {
1703+ for (auto *D : group) {
1704+ visit (D);
1705+ }
1706+ }
16941707
16951708 pp.EndSourceFile ();
16961709 bumpGeneration ();
Original file line number Diff line number Diff line change 1+ // RUN: %empty-directory(%t)
2+ // RUN: split-file --leading-lines %s %t
3+
4+ //--- Bridging-Header.h
5+
6+ void func_from_bridging_header ( void) ;
7+
8+ extern " C "
9+ void extern_c_func_from_bridging_header ( void) ;
10+
11+ extern " C " {
12+ extern " C " {
13+ void nested_extern_c_func_from_bridging_header( void) ;
14+ }
15+ }
16+
17+ //--- test.swift
18+
19+ // Passes
20+ // RUN: %sourcekitd-test -req=complete -pos 1:1 %t/test.swift -- %t/test.swift -import-bridging-header %t/Bridging-Header.h -cxx-interoperability-mode=default -pch-output-dir %t/pch-dir | %FileCheck %s
21+ // RUN: %sourcekitd-test -req=complete -pos 1:1 %t/test.swift -- %t/test.swift -import-bridging-header %t/Bridging-Header.h -cxx-interoperability-mode=default | %FileCheck %s
22+ // CHECK-DAG: func_from_bridging_header
23+ // CHECK-DAG: extern_c_func_from_bridging_header
24+ // CHECK-DAG: nested_extern_c_func_from_bridging_header
You can’t perform that action at this time.
0 commit comments