c-parse.in (cast_expr): Move compound literals from here ...
* c-parse.in (cast_expr): Move compound literals from here ... (primary): ... to here. Use standard terminology "compound literal" instead of "constructor expression". testsuite: * gcc.c-torture/compile/20010124-1.c: New test. From-SVN: r39246
This commit is contained in:
parent
9bad11e125
commit
cedd825f0f
@ -1,3 +1,9 @@
|
||||
2001-01-24 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* c-parse.in (cast_expr): Move compound literals from here ...
|
||||
(primary): ... to here. Use standard terminology "compound
|
||||
literal" instead of "constructor expression".
|
||||
|
||||
2001-01-24 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* gcc.1, cpp.1: Regenerate.
|
||||
|
@ -542,35 +542,6 @@ cast_expr:
|
||||
type = groktypename ($2);
|
||||
warn_strict_prototypes = SAVED_warn_strict_prototypes;
|
||||
$$ = build_c_cast (type, $4); }
|
||||
| '(' typename ')' '{'
|
||||
{ start_init (NULL_TREE, NULL, 0);
|
||||
$2 = groktypename ($2);
|
||||
really_start_incremental_init ($2); }
|
||||
initlist_maybe_comma '}' %prec UNARY
|
||||
{ const char *name;
|
||||
tree result = pop_init_level (0);
|
||||
tree type = $2;
|
||||
finish_init ();
|
||||
|
||||
if (pedantic && ! flag_isoc99)
|
||||
pedwarn ("ISO C89 forbids constructor expressions");
|
||||
if (TYPE_NAME (type) != 0)
|
||||
{
|
||||
if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
|
||||
name = IDENTIFIER_POINTER (TYPE_NAME (type));
|
||||
else
|
||||
name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
|
||||
}
|
||||
else
|
||||
name = "";
|
||||
$$ = result;
|
||||
if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
|
||||
{
|
||||
int failure = complete_array_type (type, $$, 1);
|
||||
if (failure)
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
expr_no_commas:
|
||||
@ -659,6 +630,35 @@ primary:
|
||||
| CONSTANT
|
||||
| string
|
||||
{ $$ = combine_strings ($1); }
|
||||
| '(' typename ')' '{'
|
||||
{ start_init (NULL_TREE, NULL, 0);
|
||||
$2 = groktypename ($2);
|
||||
really_start_incremental_init ($2); }
|
||||
initlist_maybe_comma '}' %prec UNARY
|
||||
{ const char *name;
|
||||
tree result = pop_init_level (0);
|
||||
tree type = $2;
|
||||
finish_init ();
|
||||
|
||||
if (pedantic && ! flag_isoc99)
|
||||
pedwarn ("ISO C89 forbids compound literals");
|
||||
if (TYPE_NAME (type) != 0)
|
||||
{
|
||||
if (TREE_CODE (TYPE_NAME (type)) == IDENTIFIER_NODE)
|
||||
name = IDENTIFIER_POINTER (TYPE_NAME (type));
|
||||
else
|
||||
name = IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type)));
|
||||
}
|
||||
else
|
||||
name = "";
|
||||
$$ = result;
|
||||
if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
|
||||
{
|
||||
int failure = complete_array_type (type, $$, 1);
|
||||
if (failure)
|
||||
abort ();
|
||||
}
|
||||
}
|
||||
| '(' expr ')'
|
||||
{ char class = TREE_CODE_CLASS (TREE_CODE ($2));
|
||||
if (class == 'e' || class == '1'
|
||||
|
@ -1,3 +1,7 @@
|
||||
2001-01-24 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* gcc.c-torture/compile/20010124-1.c: New test.
|
||||
|
||||
2001-01-24 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* g++.old-deja/g++.pt/spec38.C: New test.
|
||||
|
9
gcc/testsuite/gcc.c-torture/compile/20010124-1.c
Normal file
9
gcc/testsuite/gcc.c-torture/compile/20010124-1.c
Normal file
@ -0,0 +1,9 @@
|
||||
/* Origin: testcase from Joseph Myers <jsm28@cam.ac.uk>, problem pointed
|
||||
out in a post to comp.std.c
|
||||
<980283801.3063.0.nnrp-07.c2deb1c2@news.demon.co.uk>
|
||||
by Dibyendu Majumdar <dibyendu@mazumdar.demon.co.uk>.
|
||||
Compound literals should be parsed as postfix expressions, rather than
|
||||
as cast expressions. In particular, they are valid operands of sizeof. */
|
||||
|
||||
struct s { int a; int b; };
|
||||
char x[((sizeof (struct s){ 1, 2 }) == sizeof (struct s)) ? 1 : -1];
|
Loading…
Reference in New Issue
Block a user