Index: test/Sema/warn-documentation.cpp
===================================================================
--- test/Sema/warn-documentation.cpp	(revision 163974)
+++ test/Sema/warn-documentation.cpp	(working copy)
@@ -374,16 +374,25 @@
 
 /// Aaa
 /// \deprecated Bbb
-void test_deprecated_1(int a);
+void test_deprecated_1(int a) __attribute__((deprecated));
 
 // We don't want \deprecated to warn about empty paragraph.  It is fine to use
 // \deprecated by itself without explanations.
 
 /// Aaa
 /// \deprecated
-void test_deprecated_2(int a);
+void test_deprecated_2(int a) __attribute__((deprecated));
 
+/// Aaa
+/// \deprecated
+void test_deprecated_3(int a) __attribute__((unavailable));
 
+// expected-warning@+2 {{declaraiton is marked with '\deprecated' command but does not have a deprecation attribute}}
+/// Aaa
+/// \deprecated
+void test_deprecated_4(int a);
+
+
 /// \invariant aaa
 void test_invariant_1(int a);
 
Index: lib/AST/CommentSema.cpp
===================================================================
--- lib/AST/CommentSema.cpp	(revision 163974)
+++ lib/AST/CommentSema.cpp	(working copy)
@@ -45,6 +45,14 @@
 BlockCommandComment *Sema::actOnBlockCommandStart(SourceLocation LocBegin,
                                                   SourceLocation LocEnd,
                                                   unsigned CommandID) {
+  StringRef CommandName = Traits.getCommandInfo(CommandID)->Name;
+  if (CommandName == "deprecated" &&
+      !ThisDeclInfo->ThisDecl->hasAttr<DeprecatedAttr>() &&
+      !ThisDeclInfo->ThisDecl->hasAttr<UnavailableAttr>()){
+    Diag(LocBegin,
+         diag::warn_doc_deprecated_not_sync)
+      << SourceRange(LocBegin, LocEnd);
+  }
   return new (Allocator) BlockCommandComment(LocBegin, LocEnd, CommandID);
 }
 
Index: include/clang/Basic/DiagnosticGroups.td
===================================================================
--- include/clang/Basic/DiagnosticGroups.td	(revision 163974)
+++ include/clang/Basic/DiagnosticGroups.td	(working copy)
@@ -62,7 +62,8 @@
 def : DiagGroup<"div-by-zero">;
 def DocumentationHTML : DiagGroup<"documentation-html">;
 def DocumentationPedantic : DiagGroup<"documentation-pedantic">;
-def Documentation : DiagGroup<"documentation", [DocumentationHTML]>;
+def DocumentationDeprecatedNotSync : DiagGroup<"documentation-deprecated-not-sync">;
+def Documentation : DiagGroup<"documentation", [DocumentationHTML, DocumentationDeprecatedNotSync]>;
 def EmptyBody : DiagGroup<"empty-body">;
 def ExtraTokens : DiagGroup<"extra-tokens">;
 def CXX11ExtraSemi : DiagGroup<"c++11-extra-semi">;
Index: include/clang/Basic/DiagnosticCommentKinds.td
===================================================================
--- include/clang/Basic/DiagnosticCommentKinds.td	(revision 163974)
+++ include/clang/Basic/DiagnosticCommentKinds.td	(working copy)
@@ -121,5 +121,12 @@
   "method returning void}1">,
   InGroup<Documentation>, DefaultIgnore;
 
+// \deprecated command
+
+def warn_doc_deprecated_not_sync : Warning<
+  "declaraiton is marked with '\\deprecated' command but does not have "
+  "a deprecation attribute">,
+  InGroup<DocumentationDeprecatedNotSync>, DefaultIgnore;
+
 } // end of documentation issue category
 } // end of AST component
