Track down return statements in the handlers of a function-try-block of constructors. Meh ...

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70256 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp
index 482c304..7549c9c 100644
--- a/lib/Sema/SemaDecl.cpp
+++ b/lib/Sema/SemaDecl.cpp
@@ -3054,6 +3054,11 @@
   if (CurFunctionNeedsScopeChecking)
     DiagnoseInvalidJumps(Body);
 
+  // C++ constructors that have function-try-blocks can't have return statements
+  // in the handlers of that block. (C++ [except.handle]p14) Verify this.
+  if (isa<CXXConstructorDecl>(dcl) && isa<CXXTryStmt>(Body))
+    DiagnoseReturnInConstructorExceptionHandler(cast<CXXTryStmt>(Body));
+
   return D;
 }