diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-10-27 06:26:26 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-10-27 06:26:26 +0000 |
commit | ef6ab417c18fe68ae1f90d8a4d874f3cec90347b (patch) | |
tree | 7b8bcffec767ed0e94884a9984fb194b355b1baa /clang/lib/Sema/TreeTransform.h | |
parent | d169e6c28115e1e61b61cd656b3bf8b44c8531de (diff) | |
download | bcm5719-llvm-ef6ab417c18fe68ae1f90d8a4d874f3cec90347b.tar.gz bcm5719-llvm-ef6ab417c18fe68ae1f90d8a4d874f3cec90347b.zip |
Only set the point of instantiation for an implicit or explicit
instantiation once we have committed to performing the
instantiation. As part of this, make our makeshift
template-instantiation location information suck slightly less.
Fixes PR5264.
llvm-svn: 85209
Diffstat (limited to 'clang/lib/Sema/TreeTransform.h')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 872b3c0189b..15b15204472 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/lib/Sema/TreeTransform.h @@ -1884,6 +1884,7 @@ TreeTransform<Derived>::TransformTemplateArgument(const TemplateArgument &Arg) { return Arg; case TemplateArgument::Type: { + TemporaryBase Rebase(*this, Arg.getLocation(), DeclarationName()); QualType T = getDerived().TransformType(Arg.getAsType()); if (T.isNull()) return TemplateArgument(); @@ -1891,6 +1892,10 @@ TreeTransform<Derived>::TransformTemplateArgument(const TemplateArgument &Arg) { } case TemplateArgument::Declaration: { + DeclarationName Name; + if (NamedDecl *ND = dyn_cast<NamedDecl>(Arg.getAsDecl())) + Name = ND->getDeclName(); + TemporaryBase Rebase(*this, Arg.getLocation(), Name); Decl *D = getDerived().TransformDecl(Arg.getAsDecl()); if (!D) return TemplateArgument(); |