diff options
author | Sean Hunt <rideau3@gmail.com> | 2009-11-29 07:34:05 +0000 |
---|---|---|
committer | Sean Hunt <rideau3@gmail.com> | 2009-11-29 07:34:05 +0000 |
commit | 3e518bda00d710754ca077cf9be8dd821e16a854 (patch) | |
tree | 5d16331c76efc8c38935955af19bb351d7a2dcea /lib/Sema | |
parent | f219e7c1529fac29e34483667f740b452e5ef9cc (diff) |
Add DeclarationName support for C++0x operator literals. They should now work as
function names outside of templates - they'll probably cause some damage there as
they're largely untested.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90064 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema')
-rw-r--r-- | lib/Sema/SemaDecl.cpp | 3 | ||||
-rw-r--r-- | lib/Sema/SemaExpr.cpp | 1 | ||||
-rw-r--r-- | lib/Sema/SemaTemplate.cpp | 4 | ||||
-rw-r--r-- | lib/Sema/TreeTransform.h | 1 |
4 files changed, 6 insertions, 3 deletions
diff --git a/lib/Sema/SemaDecl.cpp b/lib/Sema/SemaDecl.cpp index fb97f7000f..6121719abb 100644 --- a/lib/Sema/SemaDecl.cpp +++ b/lib/Sema/SemaDecl.cpp @@ -1767,7 +1767,8 @@ DeclarationName Sema::GetNameFromUnqualifiedId(UnqualifiedId &Name) { Name.OperatorFunctionId.Operator); case UnqualifiedId::IK_LiteralOperatorId: - assert(false && "We don't support these; Parse shouldn't have allowed propagation"); + return Context.DeclarationNames.getCXXLiteralOperatorName( + Name.Identifier); case UnqualifiedId::IK_ConversionFunctionId: { QualType Ty = GetTypeFromParser(Name.ConversionFunctionId); diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index f3a6765a6a..8def7d4efc 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -729,6 +729,7 @@ Sema::OwningExprResult Sema::ActOnIdExpression(Scope *S, << Name << computeDeclContext(SS, false) << SS.getRange()); else if (Name.getNameKind() == DeclarationName::CXXOperatorName || + Name.getNameKind() == DeclarationName::CXXLiteralOperatorName || Name.getNameKind() == DeclarationName::CXXConversionFunctionName) return ExprError(Diag(NameLoc, diag::err_undeclared_use) << Name); diff --git a/lib/Sema/SemaTemplate.cpp b/lib/Sema/SemaTemplate.cpp index 9dad2f63c8..36895d4726 100644 --- a/lib/Sema/SemaTemplate.cpp +++ b/lib/Sema/SemaTemplate.cpp @@ -130,8 +130,8 @@ TemplateNameKind Sema::isTemplateName(Scope *S, break; case UnqualifiedId::IK_LiteralOperatorId: - assert(false && "We don't support these; Parse shouldn't have allowed propagation"); - + TName = Context.DeclarationNames.getCXXLiteralOperatorName(Name.Identifier); + break; default: return TNK_Non_template; diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h index 4cfaf2b79b..e397c2b294 100644 --- a/lib/Sema/TreeTransform.h +++ b/lib/Sema/TreeTransform.h @@ -1800,6 +1800,7 @@ TreeTransform<Derived>::TransformDeclarationName(DeclarationName Name, case DeclarationName::ObjCOneArgSelector: case DeclarationName::ObjCMultiArgSelector: case DeclarationName::CXXOperatorName: + case DeclarationName::CXXLiteralOperatorName: case DeclarationName::CXXUsingDirective: return Name; |