Restore patch I reversed in r138040. Known buildbot
failures are resolved.

llvm-svn: 138234
diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp
index 05fabeb..d0e6349 100644
--- a/clang/lib/Parse/ParseTemplate.cpp
+++ b/clang/lib/Parse/ParseTemplate.cpp
@@ -27,11 +27,20 @@
 Parser::ParseDeclarationStartingWithTemplate(unsigned Context,
                                              SourceLocation &DeclEnd,
                                              AccessSpecifier AS) {
-  if (Tok.is(tok::kw_template) && NextToken().isNot(tok::less))
-    return ParseExplicitInstantiation(SourceLocation(), ConsumeToken(),
-                                      DeclEnd);
-
-  return ParseTemplateDeclarationOrSpecialization(Context, DeclEnd, AS);
+  Decl *DC = getObjCDeclContext();
+  if (DC)
+    Actions.ActOnObjCContainerFinishDefinition(DC);
+  if (Tok.is(tok::kw_template) && NextToken().isNot(tok::less)) {
+    Decl *Res = ParseExplicitInstantiation(SourceLocation(), ConsumeToken(),
+                                           DeclEnd);
+    if (DC)
+      Actions.ActOnObjCContainerStartDefinition(DC);
+    return Res;
+  }
+  Decl *Res = ParseTemplateDeclarationOrSpecialization(Context, DeclEnd, AS);
+  if (DC)
+    Actions.ActOnObjCContainerStartDefinition(DC);
+  return Res;
 }
 
 /// \brief RAII class that manages the template parameter depth.