[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