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 @@ -1655,11 +1655,24 @@ bool ClangImporter::Implementation::importHeader(
1655
1655
1656
1656
// We can't do this as we're parsing because we may want to resolve naming
1657
1657
// conflicts between the things we've parsed.
1658
- for (auto group : allParsedDecls)
1659
- for (auto *D : group)
1660
- if (auto named = dyn_cast<clang::NamedDecl>(D))
1661
- addEntryToLookupTable (*BridgingHeaderLookupTable, named,
1658
+
1659
+ std::function<void (clang::Decl *)> visit = [&](clang::Decl *decl) {
1660
+ // Iterate into extern "C" {} type declarations.
1661
+ if (auto linkageDecl = dyn_cast<clang::LinkageSpecDecl>(decl)) {
1662
+ for (auto *decl : linkageDecl->noload_decls ()) {
1663
+ visit (decl);
1664
+ }
1665
+ }
1666
+ if (auto named = dyn_cast<clang::NamedDecl>(decl)) {
1667
+ addEntryToLookupTable (*BridgingHeaderLookupTable, named,
1662
1668
getNameImporter ());
1669
+ }
1670
+ };
1671
+ for (auto group : allParsedDecls) {
1672
+ for (auto *D : group) {
1673
+ visit (D);
1674
+ }
1675
+ }
1663
1676
1664
1677
pp.EndSourceFile ();
1665
1678
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