aboutsummaryrefslogtreecommitdiff
path: root/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2009-09-08 17:47:29 +0000
committerJohn McCall <rjmccall@apple.com>2009-09-08 17:47:29 +0000
commit6b2becfc434b0bdced8560802c4d0e03148c61b8 (patch)
treeda73b449e948d8acea2174ffe593b0aa22810b79 /lib/Parse/ParseDeclCXX.cpp
parent724827ff93b2c563c4a90ea43aed959f4af35e54 (diff)
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
Diffstat (limited to 'lib/Parse/ParseDeclCXX.cpp')
-rw-r--r--lib/Parse/ParseDeclCXX.cpp23
1 files changed, 12 insertions, 11 deletions
diff --git a/lib/Parse/ParseDeclCXX.cpp b/lib/Parse/ParseDeclCXX.cpp
index c82f6a4114..55c7c85fa6 100644
--- a/lib/Parse/ParseDeclCXX.cpp
+++ b/lib/Parse/ParseDeclCXX.cpp
@@ -651,26 +651,27 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind,
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;