]> granicus.if.org Git - clang/commitdiff
Specify linkage for Objective-C declarations.
authorTed Kremenek <kremenek@apple.com>
Tue, 20 Apr 2010 23:15:35 +0000 (23:15 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 20 Apr 2010 23:15:35 +0000 (23:15 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@101953 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AST/Decl.cpp

index b02cbdeb262efb60cfca351f2a0062a5d08c220a..b11f61757dbd4beca5b93525bb7f79000fe6bf1e 100644 (file)
@@ -286,6 +286,29 @@ static Linkage getLinkageForNamespaceScopeDecl(const NamedDecl *D) {
 }
 
 Linkage NamedDecl::getLinkage() const {
+
+  // Objective-C: treat all Objective-C declarations as having external
+  // linkage.
+  switch (getKind()) {
+    default:
+      break;
+    case Decl::ObjCAtDefsField:
+    case Decl::ObjCCategory:
+    case Decl::ObjCCategoryImpl:
+    case Decl::ObjCClass:
+    case Decl::ObjCCompatibleAlias:
+    case Decl::ObjCContainer:
+    case Decl::ObjCForwardProtocol:
+    case Decl::ObjCImplementation:
+    case Decl::ObjCInterface:
+    case Decl::ObjCIvar:
+    case Decl::ObjCMethod:
+    case Decl::ObjCProperty:
+    case Decl::ObjCPropertyImpl:
+    case Decl::ObjCProtocol:
+      return ExternalLinkage;
+  }
+
   // Handle linkage for namespace-scope names.
   if (getDeclContext()->getLookupContext()->isFileContext())
     if (Linkage L = getLinkageForNamespaceScopeDecl(this))