Fix test and handle IK_LiteralOperatorId in a few more places.

llvm-svn: 90030
This commit is contained in:
Alexis Hunt 2009-11-28 08:58:14 +00:00
parent 15e9a9df83
commit ed0530f694
3 changed files with 18 additions and 7 deletions

View File

@ -124,7 +124,8 @@ bool Parser::ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
break;
}
if (TemplateName.getKind() != UnqualifiedId::IK_OperatorFunctionId) {
if (TemplateName.getKind() != UnqualifiedId::IK_OperatorFunctionId &&
TemplateName.getKind() != UnqualifiedId::IK_LiteralOperatorId) {
Diag(TemplateName.getSourceRange().getBegin(),
diag::err_id_after_template_in_nested_name_spec)
<< TemplateName.getSourceRange();
@ -791,6 +792,7 @@ bool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS,
switch (Id.getKind()) {
case UnqualifiedId::IK_Identifier:
case UnqualifiedId::IK_OperatorFunctionId:
case UnqualifiedId::IK_LiteralOperatorId:
TNK = Actions.isTemplateName(CurScope, SS, Id, ObjectType, EnteringContext,
Template);
break;
@ -848,7 +850,8 @@ bool Parser::ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS,
return true;
if (Id.getKind() == UnqualifiedId::IK_Identifier ||
Id.getKind() == UnqualifiedId::IK_OperatorFunctionId) {
Id.getKind() == UnqualifiedId::IK_OperatorFunctionId ||
Id.getKind() == UnqualifiedId::IK_LiteralOperatorId) {
// Form a parsed representation of the template-id to be stored in the
// UnqualifiedId.
TemplateIdAnnotation *TemplateId
@ -1167,12 +1170,13 @@ bool Parser::ParseUnqualifiedId(CXXScopeSpec &SS, bool EnteringContext,
if (ParseUnqualifiedIdOperator(SS, EnteringContext, ObjectType, Result))
return true;
// If we have an operator-function-id and the next token is a '<', we may
// have a
// If we have an operator-function-id or a literal-operator-id and the next
// token is a '<', we may have a
//
// template-id:
// operator-function-id < template-argument-list[opt] >
if (Result.getKind() == UnqualifiedId::IK_OperatorFunctionId &&
if ((Result.getKind() == UnqualifiedId::IK_OperatorFunctionId ||
Result.getKind() == UnqualifiedId::IK_LiteralOperatorId) &&
Tok.is(tok::less))
return ParseUnqualifiedIdTemplateId(SS, 0, SourceLocation(),
EnteringContext, ObjectType,

View File

@ -130,6 +130,10 @@ TemplateNameKind Sema::isTemplateName(Scope *S,
Name.OperatorFunctionId.Operator);
break;
case UnqualifiedId::IK_LiteralOperatorId:
assert(false && "We don't support these; Parse shouldn't have allowed propagation");
default:
return TNK_Non_template;
}
@ -1687,6 +1691,9 @@ Sema::ActOnDependentTemplateName(SourceLocation TemplateKWLoc,
return TemplateTy::make(Context.getDependentTemplateName(Qualifier,
Name.OperatorFunctionId.Operator));
case UnqualifiedId::IK_LiteralOperatorId:
assert(false && "We don't support these; Parse shouldn't have allowed propagation");
default:
break;
}