diff options
| author | Anders Carlsson <andersca@mac.com> | 2009-06-26 05:26:50 +0000 |
|---|---|---|
| committer | Anders Carlsson <andersca@mac.com> | 2009-06-26 05:26:50 +0000 |
| commit | f057cb2310b324a8b051cb6840dfab7f5d4e01e0 (patch) | |
| tree | 1a29b23039bf8137a9ae8ef031171d6a5a2c04c5 /clang/lib | |
| parent | 288dcd11589e3a0b3ccb7290aa4827df04f80ad4 (diff) | |
| download | bcm5719-llvm-f057cb2310b324a8b051cb6840dfab7f5d4e01e0.tar.gz bcm5719-llvm-f057cb2310b324a8b051cb6840dfab7f5d4e01e0.zip | |
See through UsingDecls in more places.
llvm-svn: 74269
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/AST/DeclBase.cpp | 3 | ||||
| -rw-r--r-- | clang/lib/Sema/SemaLookup.cpp | 20 |
2 files changed, 17 insertions, 6 deletions
diff --git a/clang/lib/AST/DeclBase.cpp b/clang/lib/AST/DeclBase.cpp index 93bee84cff5..5815d820aef 100644 --- a/clang/lib/AST/DeclBase.cpp +++ b/clang/lib/AST/DeclBase.cpp @@ -97,6 +97,9 @@ bool Decl::isTemplateParameterPack() const { } bool Decl::isFunctionOrFunctionTemplate() const { + if (const UsingDecl *UD = dyn_cast<UsingDecl>(this)) + return UD->getTargetDecl()->isFunctionOrFunctionTemplate(); + return isa<FunctionDecl>(this) || isa<FunctionTemplateDecl>(this); } diff --git a/clang/lib/Sema/SemaLookup.cpp b/clang/lib/Sema/SemaLookup.cpp index e1c6302fcc1..d76761c6963 100644 --- a/clang/lib/Sema/SemaLookup.cpp +++ b/clang/lib/Sema/SemaLookup.cpp @@ -139,16 +139,24 @@ MaybeConstructOverloadSet(ASTContext &Context, // nothing to leak. Ovl = OverloadedFunctionDecl::Create(Context, (*I)->getDeclContext(), (*I)->getDeclName()); - if (isa<FunctionDecl>(*I)) - Ovl->addOverload(cast<FunctionDecl>(*I)); + NamedDecl *ND = (*I); + if (UsingDecl *UD = dyn_cast<UsingDecl>(ND)) + ND = UD->getTargetDecl(); + + if (isa<FunctionDecl>(ND)) + Ovl->addOverload(cast<FunctionDecl>(ND)); else - Ovl->addOverload(cast<FunctionTemplateDecl>(*I)); + Ovl->addOverload(cast<FunctionTemplateDecl>(ND)); } - if (isa<FunctionDecl>(*Last)) - Ovl->addOverload(cast<FunctionDecl>(*Last)); + NamedDecl *ND = (*Last); + if (UsingDecl *UD = dyn_cast<UsingDecl>(ND)) + ND = UD->getTargetDecl(); + + if (isa<FunctionDecl>(ND)) + Ovl->addOverload(cast<FunctionDecl>(ND)); else - Ovl->addOverload(cast<FunctionTemplateDecl>(*Last)); + Ovl->addOverload(cast<FunctionTemplateDecl>(ND)); } // If we had more than one function, we built an overload |

