]> granicus.if.org Git - clang/commitdiff
Remove the restriction on module-private friends. Since the friend
authorDouglas Gregor <dgregor@apple.com>
Mon, 12 Sep 2011 15:48:15 +0000 (15:48 +0000)
committerDouglas Gregor <dgregor@apple.com>
Mon, 12 Sep 2011 15:48:15 +0000 (15:48 +0000)
declaration may be the first declaration, we want the ability to that
declaration to be marked module-private.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139497 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticParseKinds.td
lib/Sema/DeclSpec.cpp
test/Modules/module-private.cpp

index 2c8a566719eb44065206457ee2d9273798412bcc..0f3b998c6533cb2ff4f2548f8ffea754979c6bdc 100644 (file)
@@ -582,8 +582,6 @@ def err_module_expected_ident : Error<
   "expected a module name after '__import_module__'">;
 def err_module_expected_semi : Error<
   "expected a semicolon name after module name">;
-def err_module_private_friend : Error<
-  "friend cannot be declared __module_private__">;
 }
 
 } // end of Parser diagnostics
index 531e7a535a3dd6e4b9b1b24a9d5369e6c336d121..bb483cc9b104f1a628f5594def38946f16f8c483 100644 (file)
@@ -899,13 +899,6 @@ void DeclSpec::Finish(Diagnostic &D, Preprocessor &PP) {
     ClearStorageClassSpecs();
   }
 
-  // A friend cannot be specified as module-private.
-  if (isFriendSpecified() && isModulePrivateSpecified()) {
-    Diag(D, ModulePrivateLoc, diag::err_module_private_friend)
-      << FixItHint::CreateRemoval(ModulePrivateLoc);
-    ModulePrivateLoc = SourceLocation();
-  }
-
   assert(!TypeSpecOwned || isDeclRep((TST) TypeSpecType));
  
   // Okay, now we can infer the real type.
index 849897f7333dff6c028e81ff35ff206dac1ce4d0..44215386226b833a4ebcea6a0b51f8d9fa566980 100644 (file)
@@ -96,8 +96,8 @@ struct public_class {
   struct inner_struct;
   static int static_var;
 
-  friend __module_private__ void public_func(); // expected-error{{friend cannot be declared __module_private__}}
-  friend __module_private__ struct public_struct; // expected-error{{friend cannot be declared __module_private__}}
+  friend __module_private__ void public_func_friend();
+  friend __module_private__ struct public_struct_friend;
 };
 
 template<> __module_private__ struct public_class<int>::inner_struct { }; // expected-error{{member specialization cannot be declared __module_private__}}