[cfe-commits] r154163 - in /cfe/trunk: include/clang/Basic/DiagnosticParseKinds.td lib/Parse/ParseTemplate.cpp test/FixIt/fixit-cxx0x.cpp test/FixIt/fixit.cpp test/FixIt/no-fixit.cpp test/Parser/cxx-template-decl.cpp

Francois Pichet pichet2000 at gmail.com
Sat Apr 7 00:52:54 PDT 2012


On Fri, Apr 6, 2012 at 1:26 AM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Fri Apr  6 00:26:43 2012
> New Revision: 154163
>
> URL: http://llvm.org/viewvc/llvm-project?rev=154163&view=rev
> Log:
> Restrict fixit for missing 'class' in template template parameters.
>
> Based on Doug's feedback to r153887 this omits the FixIt if the following token
> isn't syntactically valid for the context. (not a comma, '...', identifier,
> '>', or '>>')
>
> There's a bunch of work to handle the '>>' case, but it makes for a much more
> pleasant diagnostic in this case.
>
> Added:
>    cfe/trunk/test/FixIt/no-fixit.cpp
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>    cfe/trunk/lib/Parse/ParseTemplate.cpp
>    cfe/trunk/test/FixIt/fixit-cxx0x.cpp
>    cfe/trunk/test/FixIt/fixit.cpp
>    cfe/trunk/test/Parser/cxx-template-decl.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=154163&r1=154162&r2=154163&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Fri Apr  6 00:26:43 2012
> @@ -479,8 +479,8 @@
>   "unknown template name %0">;
>  def err_expected_comma_greater : Error<
>   "expected ',' or '>' in template-parameter-list">;
> -def err_expected_class_on_template_template_param : Error<
> -  "template template parameters require 'class' after the argument list">;
> +def err_class_on_template_template_param : Error<
> +  "template template parameter requires 'class' after the parameter list">;
>  def err_template_spec_syntax_non_template : Error<
>   "identifier followed by '<' indicates a class template specialization but "
>   "%0 %select{does not refer to a template|refers to a function "
>
> Modified: cfe/trunk/lib/Parse/ParseTemplate.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseTemplate.cpp?rev=154163&r1=154162&r2=154163&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseTemplate.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseTemplate.cpp Fri Apr  6 00:26:43 2012
> @@ -312,11 +312,15 @@
>   if (Tok.is(tok::greater))
>     RAngleLoc = ConsumeToken();
>   else if (ParseTemplateParameterList(Depth, TemplateParams)) {
> -    if (!Tok.is(tok::greater)) {
> +    if (Tok.is(tok::greatergreater)) {
> +      Tok.setKind(tok::greater);
> +      Tok.setLocation(Tok.getLocation().getLocWithOffset(1));
> +    } else if (Tok.is(tok::greater))
> +      RAngleLoc = ConsumeToken();
> +    else {
>       Diag(Tok.getLocation(), diag::err_expected_greater);
>       return true;
>     }
> -    RAngleLoc = ConsumeToken();
>   }
>   return false;
>  }
> @@ -339,13 +343,13 @@
>     } else {
>       // If we failed to parse a template parameter, skip until we find
>       // a comma or closing brace.
> -      SkipUntil(tok::comma, tok::greater, true, true);
> +      SkipUntil(tok::comma, tok::greater, tok::greatergreater, true, true);

Not sure what you are trying to do here but this give the highly
suspicious MSVC warning:

107>ParseTemplate.cpp(346): warning C4305: 'argument' : truncation
from 'clang::tok::TokenKind' to 'bool'

Basically the third argument 'tok::greatergreater' is for a bool
param; will always be true. Is this the intend?




More information about the cfe-commits mailing list