Commit 2f401cc8 by Nathan Sidwell Committed by Nathan Sidwell

c-parse.in (unary_expr): Move VA_ARG from here ...

        * c-parse.in (unary_expr): Move VA_ARG from here ...
        (primary): ... to here.
cp:
        * parse.y (unary_expr): Move VA_ARG from here ...
        (primary): ... to here.

testsuite:
        * g++.old-deja/g++.other/vaarg4.C: New test.
        * gcc.c-torture/compile/20001123-1.c: New test.

From-SVN: r37703
parent 3d7e9ba4
2000-11-24 Nathan Sidwell <nathan@codesourcery.com>
* c-parse.in (unary_expr): Move VA_ARG from here ...
(primary): ... to here.
2000-11-23 Graham Stott <grahams@redhat.com>
* expr.c (store_constructor): If a field is non addressable and
......
......@@ -514,8 +514,6 @@ unary_expr:
{ $$ = build_unary_op (REALPART_EXPR, $2, 0); }
| IMAGPART cast_expr %prec UNARY
{ $$ = build_unary_op (IMAGPART_EXPR, $2, 0); }
| VA_ARG '(' expr_no_commas ',' typename ')'
{ $$ = build_va_arg ($3, groktypename ($5)); }
;
sizeof:
......@@ -688,6 +686,8 @@ primary:
}
| primary '(' exprlist ')' %prec '.'
{ $$ = build_function_call ($1, $3); }
| VA_ARG '(' expr_no_commas ',' typename ')'
{ $$ = build_va_arg ($3, groktypename ($5)); }
| primary '[' expr ']' %prec '.'
{ $$ = build_array_ref ($1, $3); }
| primary '.' identifier
......
2000-11-24 Nathan Sidwell <nathan@codesourcery.com>
* parse.y (unary_expr): Move VA_ARG from here ...
(primary): ... to here.
2000-11-24 Nathan Sidwell <nathan@codesourcery.com>
* semantics.c (finish_id_expr): If type is error_mark, return
error_mark.
......
......@@ -1252,9 +1252,6 @@ unary_expr:
{ $$ = build_x_unary_op (REALPART_EXPR, $2); }
| IMAGPART cast_expr %prec UNARY
{ $$ = build_x_unary_op (IMAGPART_EXPR, $2); }
| VA_ARG '(' expr_no_commas ',' type_id ')'
{ $$ = build_x_va_arg ($3, groktypename ($5.t));
check_for_new_type ("__builtin_va_arg", $5); }
;
new_placement:
......@@ -1562,6 +1559,9 @@ primary:
{ $$ = finish_call_expr ($1, $3, 0); }
| primary LEFT_RIGHT
{ $$ = finish_call_expr ($1, NULL_TREE, 0); }
| VA_ARG '(' expr_no_commas ',' type_id ')'
{ $$ = build_x_va_arg ($3, groktypename ($5.t));
check_for_new_type ("__builtin_va_arg", $5); }
| primary '[' expr ']'
{ $$ = grok_array_decl ($$, $3); }
| primary PLUSPLUS
......
2000-11-24 Nathan Sidwell <nathan@codesourcery.com>
* g++.old-deja/g++.other/vaarg4.C: New test.
* gcc.c-torture/compile/20001123-1.c: New test.
2000-11-24 Nathan Sidwell <nathan@codesourcery.com>
* g++.other/crash24.C: Adjust and remove XFAIL.
* g++.other/crash37.C: New test.
......
// Build don't link:
// Bug 845. We were treating __builtin_va_arg as a unary expr, not a primary,
// and hence getting parse errors.
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
struct X { int y; };
void func(va_list va)
{
char* a = __builtin_va_arg(va, char**)[0];
int b = __builtin_va_arg(va, X*)->y;
}
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
struct X { int y; };
void func(va_list va)
{
char* a = __builtin_va_arg(va, char**)[0];
int b = __builtin_va_arg(va, struct X*)->y;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment