diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2012-09-26 02:36:12 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2012-09-26 02:36:12 +0000 |
commit | b826a00857718ff0a51336213a21cab02bd6fdf8 (patch) | |
tree | c7010a3358bffd0a53506aa681956c5f0e27a934 /clang/lib/Sema/SemaTemplateInstantiate.cpp | |
parent | 6e0605d6540da56bf778a4fb2598764cf004723a (diff) | |
download | bcm5719-llvm-b826a00857718ff0a51336213a21cab02bd6fdf8.tar.gz bcm5719-llvm-b826a00857718ff0a51336213a21cab02bd6fdf8.zip |
Fix the AST representation for non-type template arguments to encode
enough information so we can mangle them correctly in cases involving
dependent parameter types. (This specifically impacts cases involving
null pointers and cases involving parameters of reference type.)
Fix the mangler to use this information instead of trying to scavenge
it out of the parameter declaration.
<rdar://problem/12296776>.
llvm-svn: 164656
Diffstat (limited to 'clang/lib/Sema/SemaTemplateInstantiate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiate.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiate.cpp b/clang/lib/Sema/SemaTemplateInstantiate.cpp index c44794e3e1e..621f92bb676 100644 --- a/clang/lib/Sema/SemaTemplateInstantiate.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiate.cpp @@ -1174,10 +1174,11 @@ ExprResult TemplateInstantiator::transformNonTypeTemplateParmRef( result = SemaRef.Owned(argExpr); type = argExpr->getType(); - } else if (arg.getKind() == TemplateArgument::Declaration) { + } else if (arg.getKind() == TemplateArgument::Declaration || + arg.getKind() == TemplateArgument::NullPtr) { ValueDecl *VD; - if (Decl *D = arg.getAsDecl()) { - VD = cast<ValueDecl>(D); + if (arg.getKind() == TemplateArgument::Declaration) { + VD = cast<ValueDecl>(arg.getAsDecl()); // Find the instantiation of the template argument. This is // required for nested templates. |