aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2010-08-17 16:09:23 +0000
committerDouglas Gregor <dgregor@apple.com>2010-08-17 16:09:23 +0000
commit45975531e3e93033b41e04974340e4e8f7481d61 (patch)
treeeb018264a0663e2b9f1a7fe6731395fbf6c290cf
parent16ed9ada523a990ca4bb5015c7bf8d0ead60c7d9 (diff)
A member function never has "C" linkage. Fixes <rdar://problem/8318976>.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111238 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/AST/Decl.cpp3
-rw-r--r--test/SemaCXX/linkage-spec.cpp9
2 files changed, 12 insertions, 0 deletions
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index 419856ff50..00b052d476 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -989,6 +989,9 @@ bool FunctionDecl::isExternC() const {
break;
}
+
+ if (DC->isRecord())
+ break;
}
return false;
diff --git a/test/SemaCXX/linkage-spec.cpp b/test/SemaCXX/linkage-spec.cpp
index fdb642c78f..b2e8eb2ee8 100644
--- a/test/SemaCXX/linkage-spec.cpp
+++ b/test/SemaCXX/linkage-spec.cpp
@@ -68,3 +68,12 @@ extern "C" void pr7859_b(int) {} // expected-error {{conflicting}}
extern "C" void pr7859_c(short) {} // expected-note {{previous definition}}
extern "C" void pr7859_c(int) {} // expected-error {{conflicting}}
+
+// <rdar://problem/8318976>
+extern "C" {
+ struct s0 {
+ private:
+ s0();
+ s0(const s0 &);
+ };
+}