Hello Stepan,
On Sep 15, 2011, at 1:28 PM, Stepan Dyatkovskiy wrote:
> C++ does not allow member templates. Clang doesn't check for this case and
> crash.
>
> Please find attach the patch which fixes this.
+ // FIXME: Check that the name is an identifier!
+ IdentifierInfo *II = Name.getAsIdentifierInfo();
+
+ // Match up the template parameter lists with the scope specifier, then
+ // determine whether we have a template or a template specialization.
+ bool isExplicitSpecialization = false;
+ bool Invalid = false;
+ if (TemplateParameterList *TemplateParams =
+ MatchTemplateParametersToScopeSpecifier(
+ D.getDeclSpec().getSourceRange().getBegin(),
+ D.getIdentifierLoc(),
+ D.getCXXScopeSpec(),
+ TemplateParameterLists.get(),
+ TemplateParameterLists.size(),
+ /*never a friend*/false,
+ isExplicitSpecialization,
+ Invalid)) {
Why are we even trying to match up the template parameter lists here? One isn't
allowed to write a specialization inside a class, much less a specialization
that looks like a variable. Couldn't this be a simpler "is there a template
parameter list" check?
- Doug
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits