diff options
author | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-01 21:05:17 +0000 |
---|---|---|
committer | rth <rth@138bc75d-0d04-0410-961f-82ee72b054a4> | 1998-12-01 21:05:17 +0000 |
commit | 75bd5adae1072ec96f2b05f35147891f977ab2b2 (patch) | |
tree | 8180a32dab64f00b8c46fedcdc5e7b9928102158 /gcc/c-parse.y | |
parent | c50a498ccf40a4f355b138f6e51e500095895ba0 (diff) | |
download | gcc-75bd5adae1072ec96f2b05f35147891f977ab2b2.tar.gz |
* c-common.c (declare_function_name): Declare predefinied variable
`__func__'.
* c-decl.c (flag_isoc9x): Set to 1 by default.
(c_decode_option): Handle -std= option. Remove -flang-isoc9x.
(grokdeclarator): Always emit warning about implicit int for ISO C 9x.
* c-parse.in: Allow constructors in ISO C 9x.
Rewrite designator list handling.
Allow [*] parameters.
Don't warn about comma at end of enum definition for ISO C 9x.
* cccp.c (c9x): New variable.
(rest_extension): New variable.
(print_help): Document new -std= option.
(main): Recognize -std= option. Set c9x appropriately.
(create_definition): Recognize ISO C 9x vararg macros.
* gcc.c (default_compilers): Adjust specs for -std options.
(option_map): Add --std.
(display_help): Document -std.
* toplev.c (documented_lang_options): Add -std and remove
-flang-isoc9x.
* c-lex.c (yylex): Recognize hex FP constants and call REAL_VALUE_ATOF
or REAL_VALUE_HTOF based on base of the constants.
* fold-const.c (real_hex_to_f): New function. Replacement function
for hex FP conversion if REAL_ARITHMETIC is not defined.
* real.c (asctoeg): Add handling of hex FP constants.
* real.h: Define REAL_VALUE_HTOF if necessary using ereal_atof or
real_hex_to_f.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@24049 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/c-parse.y')
-rw-r--r-- | gcc/c-parse.y | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/gcc/c-parse.y b/gcc/c-parse.y index 99cf1675c00..aa5a5b4ae14 100644 --- a/gcc/c-parse.y +++ b/gcc/c-parse.y @@ -480,7 +480,7 @@ cast_expr: tree type = $2; finish_init (); - if (pedantic) + if (pedantic && ! flag_isoc9x) pedwarn ("ANSI C forbids constructor expressions"); if (TYPE_NAME (type) != 0) { @@ -1109,31 +1109,39 @@ initlist1: /* `initelt' is a single element of an initializer. It may use braces. */ initelt: - expr_no_commas - { process_init_element ($1); } - | '{' + designator_list '=' initval + | designator initval + | identifier ':' + { set_init_label ($1); } + initval + | initval + ; + +initval: + '{' { push_init_level (0); } initlist_maybe_comma '}' { process_init_element (pop_init_level (0)); } + | expr_no_commas + { process_init_element ($1); } | error + ; + +designator_list: + designator + | designator_list designator + ; + +designator: + '.' identifier + { set_init_label ($2); } /* These are for labeled elements. The syntax for an array element initializer conflicts with the syntax for an Objective-C message, so don't include these productions in the Objective-C grammar. */ - | '[' expr_no_commas ELLIPSIS expr_no_commas ']' '=' + | '[' expr_no_commas ELLIPSIS expr_no_commas ']' { set_init_index ($2, $4); } - initelt - | '[' expr_no_commas ']' '=' - { set_init_index ($2, NULL_TREE); } - initelt | '[' expr_no_commas ']' { set_init_index ($2, NULL_TREE); } - initelt - | identifier ':' - { set_init_label ($1); } - initelt - | '.' identifier '=' - { set_init_label ($2); } - initelt ; nested_function: @@ -1227,6 +1235,11 @@ parm_declarator: /* | parm_declarator '(' error ')' %prec '.' { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); poplevel (0, 0, 0); } */ + | parm_declarator '[' '*' ']' %prec '.' + { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); + if (! flag_isoc9x) + error ("`[*]' in parameter declaration only allowed in ISO C 9x"); + } | parm_declarator '[' expr ']' %prec '.' { $$ = build_nt (ARRAY_REF, $1, $3); } | parm_declarator '[' ']' %prec '.' @@ -1256,6 +1269,11 @@ notype_declarator: { $$ = $2; } | '*' type_quals notype_declarator %prec UNARY { $$ = make_pointer_declarator ($2, $3); } + | notype_declarator '[' '*' ']' %prec '.' + { $$ = build_nt (ARRAY_REF, $1, NULL_TREE); + if (! flag_isoc9x) + error ("`[*]' in parameter declaration only allowed in ISO C 9x"); + } | notype_declarator '[' expr ']' %prec '.' { $$ = build_nt (ARRAY_REF, $1, $3); } | notype_declarator '[' ']' %prec '.' @@ -1338,7 +1356,8 @@ maybecomma: maybecomma_warn: /* empty */ | ',' - { if (pedantic) pedwarn ("comma at end of enumerator list"); } + { if (pedantic && ! flag_isoc9x) + pedwarn ("comma at end of enumerator list"); } ; component_decl_list: |