diff options
author | John McCall <rjmccall@apple.com> | 2010-10-19 18:40:57 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2010-10-19 18:40:57 +0000 |
commit | 32723e919805d683de73ddbf63c584f71cbe0c15 (patch) | |
tree | 1730d56d773a977f53a416bee28bbbcea0bf3b6c /clang/lib/Parse/ParseDeclCXX.cpp | |
parent | 1f1e4bdbf7815c7c3ce90d3035b9615515e0c1aa (diff) | |
download | bcm5719-llvm-32723e919805d683de73ddbf63c584f71cbe0c15.tar.gz bcm5719-llvm-32723e919805d683de73ddbf63c584f71cbe0c15.zip |
Tag references shouldn't ever get template parameter lists.
Fixes rdar://problem/8568507
llvm-svn: 116843
Diffstat (limited to 'clang/lib/Parse/ParseDeclCXX.cpp')
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index ce227c6ff23..083d6ab798b 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -964,13 +964,18 @@ void Parser::ParseClassSpecifier(tok::TokenKind TagTokKind, bool IsDependent = false; + // Don't pass down template parameter lists if this is just a tag + // reference. For example, we don't need the template parameters here: + // template <class T> class A *makeA(T t); + MultiTemplateParamsArg TParams; + if (TUK != Sema::TUK_Reference && TemplateParams) + TParams = + MultiTemplateParamsArg(&(*TemplateParams)[0], TemplateParams->size()); + // Declaration or definition of a class type TagOrTempResult = Actions.ActOnTag(getCurScope(), TagType, TUK, StartLoc, SS, Name, NameLoc, AttrList, AS, - MultiTemplateParamsArg(Actions, - TemplateParams? &(*TemplateParams)[0] : 0, - TemplateParams? TemplateParams->size() : 0), - Owned, IsDependent, false, + TParams, Owned, IsDependent, false, clang::TypeResult()); // If ActOnTag said the type was dependent, try again with the |