Index: clang/lib/Sema/AnalysisBasedWarnings.cpp =================================================================== --- clang/lib/Sema/AnalysisBasedWarnings.cpp +++ clang/lib/Sema/AnalysisBasedWarnings.cpp @@ -464,7 +464,7 @@ // No more CFGElements in the block? if (ri == re) { const Stmt *Term = B.getTerminatorStmt(); - if (Term && isa(Term)) { + if (Term && (isa(Term) || isa(Term))) { HasAbnormalEdge = true; continue; } Index: clang/test/SemaObjC/return-noreturn.m =================================================================== --- /dev/null +++ clang/test/SemaObjC/return-noreturn.m @@ -0,0 +1,13 @@ +// RUN: %clang_cc1 %s -fsyntax-only -fobjc-exceptions -verify -Wreturn-type -Wmissing-noreturn + +id f(id self) { +} // expected-warning {{non-void function does not return a value}} + +id f2(id self) { + @try { + @throw (id)0; + } @catch (id) { + } + return (id)0; +} +