]> granicus.if.org Git - clang/commitdiff
Fix bogus "inline namespace cannot be reopened as non-inline" diagnostic to
authorRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 30 Sep 2016 23:16:08 +0000 (23:16 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Fri, 30 Sep 2016 23:16:08 +0000 (23:16 +0000)
just warn that the second declaration is missing the 'inline' keyword. This is
valid, and we shouldn't be suggesting otherwise.

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

include/clang/Basic/DiagnosticSemaKinds.td
lib/Sema/SemaDeclCXX.cpp
test/CXX/dcl.dcl/basic.namespace/namespace.def/p7.cpp

index 58e8e00d85f759f896c8df7ffb1f91716aa8b02e..a65cf97ca600b07d2da2e2915578332c290aea5c 100644 (file)
@@ -1142,10 +1142,9 @@ def warn_cxx14_compat_inline_variable : Warning<
   DefaultIgnore, InGroup<CXXPre1zCompat>;
 
 def warn_inline_namespace_reopened_noninline : Warning<
-  "inline namespace cannot be reopened as a non-inline namespace">;
+  "inline namespace reopened as a non-inline namespace">;
 def err_inline_namespace_mismatch : Error<
-  "%select{|non-}0inline namespace "
-  "cannot be reopened as %select{non-|}0inline">;
+  "non-inline namespace cannot be reopened as inline">;
 
 def err_unexpected_friend : Error<
   "friends can only be classes or functions">;
index 6c952e018223a002a94c5eae4bef40a01d303b61..133f1f47cc4e845de29d59d1d88b7bf0084487b3 100644 (file)
@@ -8089,7 +8089,7 @@ static void DiagnoseNamespaceInlineMismatch(Sema &S, SourceLocation KeywordLoc,
     S.Diag(Loc, diag::warn_inline_namespace_reopened_noninline)
       << FixItHint::CreateInsertion(KeywordLoc, "inline ");
   else
-    S.Diag(Loc, diag::err_inline_namespace_mismatch) << *IsInline;
+    S.Diag(Loc, diag::err_inline_namespace_mismatch);
 
   S.Diag(PrevNS->getLocation(), diag::note_previous_definition);
   *IsInline = PrevNS->isInline();
index f92362380a1c27a2a02a4f38d9cd8b39a94ba3a7..39bed7db7ab38f922f342813ef9c700bed4713b0 100644 (file)
@@ -1,13 +1,18 @@
 // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
 
+// FIXME: We should probably suppress the warning on reopening an inline
+// namespace without the inline keyword if it's not the first opening of the
+// namespace in the file, because there's no risk of the inlineness differing
+// across TUs in that case.
+
 namespace NIL {} // expected-note {{previous definition}}
 inline namespace NIL {} // expected-error {{cannot be reopened as inline}}
 inline namespace IL {} // expected-note {{previous definition}}
-namespace IL {} // expected-warning{{inline namespace cannot be reopened as a non-inline namespace}}
+namespace IL {} // expected-warning{{inline namespace reopened as a non-inline namespace}}
 
 namespace {} // expected-note {{previous definition}}
 inline namespace {} // expected-error {{cannot be reopened as inline}}
 namespace X {
   inline namespace {} // expected-note {{previous definition}}
-  namespace {} // expected-warning {{cannot be reopened as a non-inline namespace}}
+  namespace {} // expected-warning {{inline namespace reopened as a non-inline namespace}}
 }