summaryrefslogtreecommitdiffstats
path: root/clang/lib/Parse/ParseDeclCXX.cpp
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-10-19 18:40:57 +0000
committerJohn McCall <rjmccall@apple.com>2010-10-19 18:40:57 +0000
commit32723e919805d683de73ddbf63c584f71cbe0c15 (patch)
tree1730d56d773a977f53a416bee28bbbcea0bf3b6c /clang/lib/Parse/ParseDeclCXX.cpp
parent1f1e4bdbf7815c7c3ce90d3035b9615515e0c1aa (diff)
downloadbcm5719-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.cpp13
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
OpenPOWER on IntegriCloud