diff options
author | John McCall <rjmccall@apple.com> | 2009-10-29 18:45:58 +0000 |
---|---|---|
committer | John McCall <rjmccall@apple.com> | 2009-10-29 18:45:58 +0000 |
commit | 0d07eb32decf4480a0a90616c397f0dbe6cce537 (patch) | |
tree | dd5ce5e44013733611304e3fda8251d4052e66ad /clang/lib/Sema/SemaTemplate.cpp | |
parent | 94f8f8789010dda14f87539535bd37566a5d114a (diff) | |
download | bcm5719-llvm-0d07eb32decf4480a0a90616c397f0dbe6cce537.tar.gz bcm5719-llvm-0d07eb32decf4480a0a90616c397f0dbe6cce537.zip |
A few TemplateArgumentLoc clean-ups. Try to remember the Expr for a declaration.
Provide an API for getting the SourceRange of a TAL and use it judiciously.
llvm-svn: 85520
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
-rw-r--r-- | clang/lib/Sema/SemaTemplate.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/clang/lib/Sema/SemaTemplate.cpp b/clang/lib/Sema/SemaTemplate.cpp index a2883fa9804..fb5eef27605 100644 --- a/clang/lib/Sema/SemaTemplate.cpp +++ b/clang/lib/Sema/SemaTemplate.cpp @@ -1425,7 +1425,8 @@ bool Sema::CheckTemplateTypeArgument(TemplateTypeParmDecl *Param, // We have a template type parameter but the template argument // is not a type. - Diag(AL.getLocation(), diag::err_template_arg_must_be_type); + SourceRange SR = AL.getSourceRange(); + Diag(SR.getBegin(), diag::err_template_arg_must_be_type) << SR; Diag(Param->getLocation(), diag::note_template_param_here); return true; @@ -1558,8 +1559,8 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template, break; // FIXME: Subst default argument - // FIXME: preserve source information - Arg = TemplateArgumentLoc(TemplateArgument(TempParm->getDefaultArgument())); + Arg = TemplateArgumentLoc(TemplateArgument(TempParm->getDefaultArgument()), + TempParm->getDefaultArgument()); } } else { // Retrieve the template argument produced by the user. @@ -1646,11 +1647,12 @@ bool Sema::CheckTemplateArgumentList(TemplateDecl *Template, // We warn specifically about this case, since it can be rather // confusing for users. QualType T = Arg.getArgument().getAsType(); + SourceRange SR = Arg.getSourceRange(); if (T->isFunctionType()) - Diag(Arg.getLocation(), diag::err_template_arg_nontype_ambig) - << T; + Diag(SR.getBegin(), diag::err_template_arg_nontype_ambig) + << SR << T; else - Diag(Arg.getLocation(), diag::err_template_arg_must_be_expr); + Diag(SR.getBegin(), diag::err_template_arg_must_be_expr) << SR; Diag((*Param)->getLocation(), diag::note_template_param_here); Invalid = true; break; |