Index: include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- include/clang/Basic/DiagnosticSemaKinds.td	(revision 139364)
+++ include/clang/Basic/DiagnosticSemaKinds.td	(working copy)
@@ -238,6 +238,9 @@
 def warn_suggest_noreturn_function : Warning<
   "function %0 could be declared with attribute 'noreturn'">,
   InGroup<DiagGroup<"missing-noreturn">>, DefaultIgnore;
+def warn_suggest_noreturn_method : Warning<
+  "method %0 could be declared with attribute 'noreturn'">,
+  InGroup<DiagGroup<"missing-noreturn">>, DefaultIgnore;
 def warn_suggest_noreturn_block : Warning<
   "block could be declared with attribute 'noreturn'">,
   InGroup<DiagGroup<"missing-noreturn">>, DefaultIgnore;
Index: lib/Sema/AnalysisBasedWarnings.cpp
===================================================================
--- lib/Sema/AnalysisBasedWarnings.cpp	(revision 139364)
+++ lib/Sema/AnalysisBasedWarnings.cpp	(working copy)
@@ -266,8 +266,8 @@
       isVirtualMethod = Method->isVirtual();
     
     if (!isVirtualMethod)
-      D.diag_NeverFallThroughOrReturn =
-        diag::warn_suggest_noreturn_function;
+      D.diag_NeverFallThroughOrReturn = isa<ObjCMethodDecl>(Func) ? 
+      diag::warn_suggest_noreturn_method : diag::warn_suggest_noreturn_function;      
     else
       D.diag_NeverFallThroughOrReturn = 0;
     
@@ -377,11 +377,11 @@
         break;
       case NeverFallThroughOrReturn:
         if (ReturnsVoid && !HasNoReturn && CD.diag_NeverFallThroughOrReturn) {
-          if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
+          if (isa<BlockDecl>(D)) {
+            S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn);
+          } else {
             S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn)
-              << FD;
-          } else {
-            S.Diag(Compound->getLBracLoc(), CD.diag_NeverFallThroughOrReturn);
+              << cast<NamedDecl>(D);            
           }
         }
         break;
Index: test/SemaObjC/return.m
===================================================================
--- test/SemaObjC/return.m	(revision 139364)
+++ test/SemaObjC/return.m	(working copy)
@@ -39,3 +39,12 @@
     }
 }
 
+@interface Foo
+- (void)test4;
+@end
+@implementation Foo
+- (void)test4 { // expected-warning {{method 'test4' could be declared with attribute 'noreturn'}}
+  @throw @"c";
+}
+@end
+
