diff --git a/lib/IRGen/GenClangDecl.cpp b/lib/IRGen/GenClangDecl.cpp index 158984a283031..639830e106982 100644 --- a/lib/IRGen/GenClangDecl.cpp +++ b/lib/IRGen/GenClangDecl.cpp @@ -188,6 +188,9 @@ void IRGenModule::emitClangDecl(const clang::Decl *decl) { if (isa(DC)) { break; } + if (isa(DC)) { + break; + } D = cast(DC); } if (!GlobalClangDecls.insert(D->getCanonicalDecl()).second) { diff --git a/test/Interop/Cxx/extern-c/Inputs/inline-func.h b/test/Interop/Cxx/extern-c/Inputs/inline-func.h new file mode 100644 index 0000000000000..e859a17762813 --- /dev/null +++ b/test/Interop/Cxx/extern-c/Inputs/inline-func.h @@ -0,0 +1,18 @@ +extern "C" { + +inline void inlineFn(); + +void cacheMis() { } +void incorrectCacheHit() { + inlineFn(); +} + +static void caller() { + cacheMis(); + incorrectCacheHit(); +} + +inline void inlineFn() { } + +} + diff --git a/test/Interop/Cxx/extern-c/Inputs/module.modulemap b/test/Interop/Cxx/extern-c/Inputs/module.modulemap index 862416f72d874..9fee0c9fef0c8 100644 --- a/test/Interop/Cxx/extern-c/Inputs/module.modulemap +++ b/test/Interop/Cxx/extern-c/Inputs/module.modulemap @@ -2,3 +2,8 @@ module ExternC { header "extern-c.h" requires cplusplus } + +module InlineFunc { + header "inline-func.h" + requires cplusplus +} diff --git a/test/Interop/Cxx/extern-c/inline-func.swift b/test/Interop/Cxx/extern-c/inline-func.swift new file mode 100644 index 0000000000000..a09476df8a83e --- /dev/null +++ b/test/Interop/Cxx/extern-c/inline-func.swift @@ -0,0 +1,8 @@ +// RUN: %target-run-simple-swift(-I %S/Inputs/ -Xfrontend -enable-experimental-cxx-interop) +// REQUIRES: executable_test + +import InlineFunc + +public func test() { + caller() +}