Support templateids in friend declarations.  Fixes bug 4859.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@81233 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index c82f6a4..55c7c85 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -651,26 +651,27 @@
                                              TemplateId->RAngleLoc, 
                                              Attr);
     } else if (TUK == Action::TUK_Reference || TUK == Action::TUK_Friend) {
-      Action::TypeResult TypeResult =
-        Actions.ActOnTemplateIdType(TemplateTy::make(TemplateId->Template),
-                                    TemplateId->TemplateNameLoc,
-                                    TemplateId->LAngleLoc,
-                                    TemplateArgsPtr,
-                                    TemplateId->getTemplateArgLocations(),
-                                    TemplateId->RAngleLoc,
-                                    TagType, StartLoc);
+      Action::TypeResult Type
+        = Actions.ActOnTemplateIdType(TemplateTy::make(TemplateId->Template),
+                                      TemplateId->TemplateNameLoc,
+                                      TemplateId->LAngleLoc,
+                                      TemplateArgsPtr,
+                                      TemplateId->getTemplateArgLocations(),
+                                      TemplateId->RAngleLoc);
+
+      Type = Actions.ActOnTagTemplateIdType(Type, TUK, TagType, StartLoc);
 
       TemplateId->Destroy();
 
-      if (TypeResult.isInvalid()) {
+      if (Type.isInvalid()) {
         DS.SetTypeSpecError();
         return;
       }
-  
+
       const char *PrevSpec = 0;
       unsigned DiagID;
       if (DS.SetTypeSpecType(DeclSpec::TST_typename, StartLoc, PrevSpec,
-                             DiagID, TypeResult.get()))
+                             DiagID, Type.get()))
         Diag(StartLoc, DiagID) << PrevSpec;
 
       return;