[cfe-commits] r110568 - in /cfe/trunk: include/clang/Basic/DiagnosticParseKinds.td lib/Parse/ParseCXXInlineMethods.cpp

Chris Lattner clattner at apple.com
Mon Aug 9 09:04:24 PDT 2010


On Aug 9, 2010, at 3:54 AM, Argyrios Kyrtzidis wrote:

> Author: akirtzidis
> Date: Mon Aug  9 05:54:26 2010
> New Revision: 110568
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=110568&view=rev
> Log:
> Replace a parser assertion with a warning, suggestion by Doug.

Testcase?

-Chris

> 
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
>    cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
> 
> Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=110568&r1=110567&r2=110568&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Mon Aug  9 05:54:26 2010
> @@ -271,6 +271,8 @@
>   "expected a class name after '~' to name a destructor">;
> def err_destructor_template_id : Error<
>   "destructor name %0 does not refer to a template">;
> +def warn_default_arg_unparsed : Warning<
> +  "parsing of default argument is incomplete">;
> 
> // C++ derived classes
> def err_dup_virtual : Error<"duplicate 'virtual' in base specifier">;
> 
> Modified: cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp?rev=110568&r1=110567&r2=110568&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp Mon Aug  9 05:54:26 2010
> @@ -143,9 +143,14 @@
>         if (DefArgResult.isInvalid())
>           Actions.ActOnParamDefaultArgumentError(LM.DefaultArgs[I].Param);
>         else {
> -          assert(Tok.is(tok::cxx_defaultarg_end) &&
> -                 "We didn't parse the whole default arg!");
> -          ConsumeToken(); // Consume tok::cxx_defaultarg_end.
> +          if (Tok.is(tok::cxx_defaultarg_end))
> +            ConsumeToken();
> +          else {
> +            // Warn that there are tokens from the default arg that we left
> +            // unparsed. This actually indicates a bug in clang but we avoid
> +            // asserting because we want the parser robust.
> +            Diag(Tok.getLocation(), diag::warn_default_arg_unparsed);
> +          }
>           Actions.ActOnParamDefaultArgument(LM.DefaultArgs[I].Param, EqualLoc,
>                                             move(DefArgResult));
>         }
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits





More information about the cfe-commits mailing list