diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-02-04 15:01:18 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-02-04 15:01:18 +0000 |
commit | 17330019f05966762bc952840ef1926b9becb145 (patch) | |
tree | fbaf21c970aacbde8a56ad400a2532c66d2fadd0 /lib/AST/StmtSerialization.cpp | |
parent | 20bcd55e1465ae0ee149cf4f92aeeb771791ce71 (diff) |
Fix our semantic analysis of
unqualified-id '('
in C++. The unqualified-id might not refer to any declaration in our
current scope, but declarations by that name might be found via
argument-dependent lookup. We now do so properly.
As part of this change, CXXDependentNameExpr, which was previously
designed to express the unqualified-id in the above constructor within
templates, has become UnresolvedFunctionNameExpr, which does
effectively the same thing but will work for both templates and
non-templates.
Additionally, we cope with all unqualified-ids, since ADL also applies
in cases like
operator+(x, y)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@63733 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/StmtSerialization.cpp')
-rw-r--r-- | lib/AST/StmtSerialization.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/AST/StmtSerialization.cpp b/lib/AST/StmtSerialization.cpp index 8599a7aba9..3bb98b46f4 100644 --- a/lib/AST/StmtSerialization.cpp +++ b/lib/AST/StmtSerialization.cpp @@ -245,8 +245,8 @@ Stmt* Stmt::Create(Deserializer& D, ASTContext& C) { case CXXDeleteExprClass: return CXXDeleteExpr::CreateImpl(D, C); - case CXXDependentNameExprClass: - return CXXDependentNameExpr::CreateImpl(D, C); + case UnresolvedFunctionNameExprClass: + return UnresolvedFunctionNameExpr::CreateImpl(D, C); case CXXCatchStmtClass: return CXXCatchStmt::CreateImpl(D, C); @@ -1528,18 +1528,18 @@ CXXDeleteExpr::CreateImpl(Deserializer& D, ASTContext& C) { cast<Expr>(Argument), Loc); } -void CXXDependentNameExpr::EmitImpl(llvm::Serializer& S) const { +void UnresolvedFunctionNameExpr::EmitImpl(llvm::Serializer& S) const { S.Emit(getType()); - S.EmitPtr(Name); + S.EmitPtr(Name.getAsIdentifierInfo()); // FIXME: WRONG! S.Emit(Loc); } -CXXDependentNameExpr * -CXXDependentNameExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { +UnresolvedFunctionNameExpr * +UnresolvedFunctionNameExpr::CreateImpl(llvm::Deserializer& D, ASTContext& C) { QualType Ty = QualType::ReadVal(D); IdentifierInfo *N = D.ReadPtr<IdentifierInfo>(); SourceLocation L = SourceLocation::ReadVal(D); - return new CXXDependentNameExpr(N, Ty, L); + return new UnresolvedFunctionNameExpr(N, Ty, L); } void UnaryTypeTraitExpr::EmitImpl(llvm::Serializer& S) const { |