diff options
| -rw-r--r-- | clang/lib/AST/DeclBase.cpp | 2 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/extern-c.cpp | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 1de1fe21de3..c12f53c6766 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -837,7 +837,7 @@ static bool isLinkageSpecContext(const DeclContext *DC, while (DC->getDeclKind() != Decl::TranslationUnit) { if (DC->getDeclKind() == Decl::LinkageSpec) return cast<LinkageSpecDecl>(DC)->getLanguage() == ID; - DC = DC->getParent(); + DC = DC->getLexicalParent(); } return false; } diff --git a/clang/test/CodeGenCXX/extern-c.cpp b/clang/test/CodeGenCXX/extern-c.cpp index 63bb177b84d..fefb216ea1c 100644 --- a/clang/test/CodeGenCXX/extern-c.cpp +++ b/clang/test/CodeGenCXX/extern-c.cpp @@ -66,3 +66,10 @@ extern "C" { // CHECK-NOT: @unused // CHECK-NOT: @duplicate_internal } + +namespace PR19411 { + struct A { void f(); }; + extern "C" void A::f() { void g(); g(); } + // CHECK-LABEL: @_ZN7PR194111A1fEv( + // CHECK: call void @g() +} |

