[cfe-commits] r152721 - in /cfe/trunk: lib/Parse/ParseCXXInlineMethods.cpp lib/Parse/ParseDecl.cpp test/SemaCXX/cxx0x-initializer-scalars.cpp

Eli Friedman eli.friedman at gmail.com
Thu Mar 15 18:04:34 PDT 2012


On Wed, Mar 14, 2012 at 8:54 AM, Sebastian Redl
<sebastian.redl at getdesigned.at> wrote:
> Author: cornedbee
> Date: Wed Mar 14 10:54:00 2012
> New Revision: 152721
>
> URL: http://llvm.org/viewvc/llvm-project?rev=152721&view=rev
> Log:
> Parse brace initializers as default arguments. PR12236.
>
> Modified:
>    cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
>    cfe/trunk/lib/Parse/ParseDecl.cpp
>    cfe/trunk/test/SemaCXX/cxx0x-initializer-scalars.cpp
>
> Modified: cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp?rev=152721&r1=152720&r2=152721&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseCXXInlineMethods.cpp Wed Mar 14 10:54:00 2012
> @@ -319,7 +319,11 @@
>                                             Sema::PotentiallyEvaluatedIfUsed,
>                                             LM.DefaultArgs[I].Param);
>
> -      ExprResult DefArgResult(ParseAssignmentExpression());
> +      ExprResult DefArgResult;
> +      if (Tok.is(tok::l_brace))
> +        DefArgResult = ParseBraceInitializer();
> +      else
> +        DefArgResult = ParseAssignmentExpression();
>       if (DefArgResult.isInvalid())
>         Actions.ActOnParamDefaultArgumentError(LM.DefaultArgs[I].Param);
>       else {
>
> Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=152721&r1=152720&r2=152721&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
> +++ cfe/trunk/lib/Parse/ParseDecl.cpp Wed Mar 14 10:54:00 2012
> @@ -4169,6 +4169,7 @@
>  ///       parameter-declaration: [C99 6.7.5]
>  ///         declaration-specifiers declarator
>  /// [C++]   declaration-specifiers declarator '=' assignment-expression
> +/// [C++11]                                       initializer-clause
>  /// [GNU]   declaration-specifiers declarator attributes
>  ///         declaration-specifiers abstract-declarator[opt]
>  /// [C++]   declaration-specifiers abstract-declarator[opt]
> @@ -4280,7 +4281,11 @@
>                                               Sema::PotentiallyEvaluatedIfUsed,
>                                                 Param);
>
> -          ExprResult DefArgResult(ParseAssignmentExpression());
> +          ExprResult DefArgResult;
> +          if (Tok.is(tok::l_brace))
> +            DefArgResult = ParseBraceInitializer();
> +          else
> +            DefArgResult = ParseAssignmentExpression();

With this change, we accept "int f(int a = {1});" in C++98 mode
without a warning.  That seems wrong.

-Eli




More information about the cfe-commits mailing list