diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h
index b31f038..413044b 100644
--- a/include/clang/AST/Decl.h
+++ b/include/clang/AST/Decl.h
@@ -1508,11 +1508,15 @@
   /// \param TSK the kind of template specialization this is.
   ///
   /// \param TemplateArgsAsWritten location info of template arguments.
+  ///
+  /// \param PointOfInstantiation point at which the function template
+  /// specialization was first instantiated. 
   void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
                                       const TemplateArgumentList *TemplateArgs,
                                          void *InsertPos,
                     TemplateSpecializationKind TSK = TSK_ImplicitInstantiation,
-                    const TemplateArgumentListInfo *TemplateArgsAsWritten = 0);
+                    const TemplateArgumentListInfo *TemplateArgsAsWritten = 0,
+                    SourceLocation PointOfInstantiation = SourceLocation());
 
   /// \brief Specify that this function declaration is actually a function
   /// template specialization.
@@ -1537,6 +1541,9 @@
   /// \param LAngleLoc location of left angle token.
   ///
   /// \param RAngleLoc location of right angle token.
+  ///
+  /// \param PointOfInstantiation point at which the function template
+  /// specialization was first instantiated. 
   void setFunctionTemplateSpecialization(FunctionTemplateDecl *Template,
                                          unsigned NumTemplateArgs,
                                          const TemplateArgument *TemplateArgs,
@@ -1544,7 +1551,8 @@
                                          unsigned NumTemplateArgsAsWritten,
                                      TemplateArgumentLoc *TemplateArgsAsWritten,
                                           SourceLocation LAngleLoc,
-                                          SourceLocation RAngleLoc);
+                                          SourceLocation RAngleLoc,
+                                          SourceLocation PointOfInstantiation);
 
   /// \brief Specifies that this function declaration is actually a
   /// dependent function template specialization.
diff --git a/lib/AST/Decl.cpp b/lib/AST/Decl.cpp
index c3c30f9..6fa6745 100644
--- a/lib/AST/Decl.cpp
+++ b/lib/AST/Decl.cpp
@@ -1352,7 +1352,8 @@
                                      const TemplateArgumentList *TemplateArgs,
                                                 void *InsertPos,
                                                 TemplateSpecializationKind TSK,
-                        const TemplateArgumentListInfo *TemplateArgsAsWritten) {
+                        const TemplateArgumentListInfo *TemplateArgsAsWritten,
+                                          SourceLocation PointOfInstantiation) {
   assert(TSK != TSK_Undeclared && 
          "Must specify the type of function template specialization");
   FunctionTemplateSpecializationInfo *Info
@@ -1365,6 +1366,7 @@
   Info->Template.setInt(TSK - 1);
   Info->TemplateArguments = TemplateArgs;
   Info->TemplateArgumentsAsWritten = TemplateArgsAsWritten;
+  Info->PointOfInstantiation = PointOfInstantiation;
   TemplateOrSpecialization = Info;
 
   // Insert this function template specialization into the set of known
@@ -1391,7 +1393,8 @@
                                               unsigned NumTemplateArgsAsWritten,
                                    TemplateArgumentLoc *TemplateArgsAsWritten,
                                                 SourceLocation LAngleLoc,
-                                                SourceLocation RAngleLoc) {
+                                                SourceLocation RAngleLoc,
+                                          SourceLocation PointOfInstantiation) {
   ASTContext &Ctx = getASTContext();
   TemplateArgumentList *TemplArgs
     = new (Ctx) TemplateArgumentList(Ctx, TemplateArgs, NumTemplateArgs);
@@ -1401,7 +1404,7 @@
     TemplArgsInfo->addArgument(TemplateArgsAsWritten[i]);
 
   setFunctionTemplateSpecialization(Template, TemplArgs, /*InsertPos=*/0, TSK,
-                                    TemplArgsInfo);
+                                    TemplArgsInfo, PointOfInstantiation);
 }
 
 void
diff --git a/lib/Frontend/PCHReaderDecl.cpp b/lib/Frontend/PCHReaderDecl.cpp
index be4f72e..1a1f23f 100644
--- a/lib/Frontend/PCHReaderDecl.cpp
+++ b/lib/Frontend/PCHReaderDecl.cpp
@@ -248,12 +248,14 @@
       LAngleLoc = Reader.ReadSourceLocation(Record, Idx);
       RAngleLoc = Reader.ReadSourceLocation(Record, Idx);
     }
+    
+    SourceLocation POI = Reader.ReadSourceLocation(Record, Idx);
 
     FD->setFunctionTemplateSpecialization(Template, TemplArgs.size(),
                                           TemplArgs.data(), TSK,
                                           TemplArgLocs.size(),
                                           TemplArgLocs.data(),
-                                          LAngleLoc, RAngleLoc);
+                                          LAngleLoc, RAngleLoc, POI);
     break;
   }
   case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
@@ -268,6 +270,8 @@
     unsigned NumArgs = Record[Idx++];
     while (NumArgs--)
       TemplArgs.addArgument(Reader.ReadTemplateArgumentLoc(Record, Idx));
+    TemplArgs.setLAngleLoc(Reader.ReadSourceLocation(Record, Idx));
+    TemplArgs.setRAngleLoc(Reader.ReadSourceLocation(Record, Idx));
     
     FD->setDependentTemplateSpecialization(*Reader.getContext(),
                                            TemplDecls, TemplArgs);
diff --git a/lib/Frontend/PCHWriterDecl.cpp b/lib/Frontend/PCHWriterDecl.cpp
index deca4b2..9f7264e 100644
--- a/lib/Frontend/PCHWriterDecl.cpp
+++ b/lib/Frontend/PCHWriterDecl.cpp
@@ -249,6 +249,8 @@
       Writer.AddSourceLocation(FTSInfo->TemplateArgumentsAsWritten->getRAngleLoc(),
                                Record);
     }
+    
+    Writer.AddSourceLocation(FTSInfo->getPointOfInstantiation(), Record);
     break;
   }
   case FunctionDecl::TK_DependentFunctionTemplateSpecialization: {
@@ -264,6 +266,8 @@
     Record.push_back(DFTSInfo->getNumTemplateArgs());
     for (int i=0, e = DFTSInfo->getNumTemplateArgs(); i != e; ++i)
       Writer.AddTemplateArgumentLoc(DFTSInfo->getTemplateArg(i), Record);
+    Writer.AddSourceLocation(DFTSInfo->getLAngleLoc(), Record);
+    Writer.AddSourceLocation(DFTSInfo->getRAngleLoc(), Record);
     break;
   }
   }
