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 @@ -1672,11 +1672,24 @@ bool ClangImporter::Implementation::importHeader(
1672
1672
1673
1673
// We can't do this as we're parsing because we may want to resolve naming
1674
1674
// conflicts between the things we've parsed.
1675
- for (auto group : allParsedDecls)
1676
- for (auto *D : group)
1677
- if (auto named = dyn_cast<clang::NamedDecl>(D))
1678
- addEntryToLookupTable (*BridgingHeaderLookupTable, named,
1675
+
1676
+ std::function<void (clang::Decl *)> visit = [&](clang::Decl *decl) {
1677
+ // Iterate into extern "C" {} type declarations.
1678
+ if (auto linkageDecl = dyn_cast<clang::LinkageSpecDecl>(decl)) {
1679
+ for (auto *decl : linkageDecl->noload_decls ()) {
1680
+ visit (decl);
1681
+ }
1682
+ }
1683
+ if (auto named = dyn_cast<clang::NamedDecl>(decl)) {
1684
+ addEntryToLookupTable (*BridgingHeaderLookupTable, named,
1679
1685
getNameImporter ());
1686
+ }
1687
+ };
1688
+ for (auto group : allParsedDecls) {
1689
+ for (auto *D : group) {
1690
+ visit (D);
1691
+ }
1692
+ }
1680
1693
1681
1694
pp.EndSourceFile ();
1682
1695
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