diff options
author | John McCall <rjmccall@apple.com> | 2009-09-08 17:47:29 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-09-08 17:47:29 +0000 |
commit | 6b2becfc434b0bdced8560802c4d0e03148c61b8 (patch) | |
tree | da73b449e948d8acea2174ffe593b0aa22810b79 /lib/Parse/ParseDeclCXX.cpp | |
parent | 724827ff93b2c563c4a90ea43aed959f4af35e54 (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.cpp | 23 |
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; |