diff options
Diffstat (limited to 'gcc/c-parse.in')
| -rw-r--r-- | gcc/c-parse.in | 104 |
1 files changed, 23 insertions, 81 deletions
diff --git a/gcc/c-parse.in b/gcc/c-parse.in index e628aa5fe90..91a42d91814 100644 --- a/gcc/c-parse.in +++ b/gcc/c-parse.in @@ -208,7 +208,7 @@ do { \ %type <ttype> any_word %type <ttype> compstmt compstmt_start compstmt_nostart compstmt_primary_start -%type <ttype> do_stmt_start poplevel stmt label +%type <ttype> do_stmt_start pop_scope stmt label %type <ttype> c99_block_start c99_block_end %type <ttype> declarator @@ -328,8 +328,6 @@ static int objc_need_raw_identifier; #define OBJC_NEED_RAW_IDENTIFIER(VAL) /* nothing */ @@end_ifc -static bool parsing_iso_function_signature; - /* Tell yyparse how to print a token's value, if yydebug is set. */ #define YYPRINT(FILE,YYCHAR,YYLVAL) yyprint(FILE,YYCHAR,YYLVAL) @@ -368,11 +366,6 @@ extdefs: ; extdef: - extdef_1 - { parsing_iso_function_signature = false; } /* Reset after any external definition. */ - ; - -extdef_1: fndef | datadef | asmdef @@ -741,28 +734,8 @@ primary: ; old_style_parm_decls: - old_style_parm_decls_1 - { - parsing_iso_function_signature = false; /* Reset after decls. */ - } - ; - -old_style_parm_decls_1: /* empty */ - { - if (warn_traditional && !in_system_header - && parsing_iso_function_signature) - warning ("traditional C rejects ISO C style function definitions"); - if (warn_old_style_definition && !in_system_header - && !parsing_iso_function_signature) - warning ("old-style parameter declaration"); - parsing_iso_function_signature = false; /* Reset after warning. */ - } | datadecls - { - if (warn_old_style_definition && !in_system_header) - warning ("old-style parameter declaration"); - } ; /* The following are analogous to lineno_decl, decls and decl @@ -1555,7 +1528,6 @@ nested_function: pop_function_context (); YYERROR1; } - parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } old_style_parm_decls save_location { tree decl = current_function_decl; @@ -1586,7 +1558,6 @@ notype_nested_function: pop_function_context (); YYERROR1; } - parsing_iso_function_signature = false; /* Don't warn about nested functions. */ } old_style_parm_decls save_location { tree decl = current_function_decl; @@ -1620,9 +1591,6 @@ after_type_declarator: { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } | after_type_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } -/* | after_type_declarator '(' error ')' %prec '.' - { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); - poplevel (0, 0, 0); } */ | after_type_declarator array_declarator %prec '.' { $$ = set_array_declarator_type ($2, $1, 0); } | '*' maybe_type_quals_attrs after_type_declarator %prec UNARY @@ -1645,9 +1613,6 @@ parm_declarator: parm_declarator_starttypename: parm_declarator_starttypename '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } -/* | parm_declarator_starttypename '(' error ')' %prec '.' - { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); - poplevel (0, 0, 0); } */ | parm_declarator_starttypename array_declarator %prec '.' { $$ = set_array_declarator_type ($2, $1, 0); } | TYPENAME @@ -1659,9 +1624,6 @@ parm_declarator_starttypename: parm_declarator_nostarttypename: parm_declarator_nostarttypename '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } -/* | parm_declarator_nostarttypename '(' error ')' %prec '.' - { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); - poplevel (0, 0, 0); } */ | parm_declarator_nostarttypename array_declarator %prec '.' { $$ = set_array_declarator_type ($2, $1, 0); } | '*' maybe_type_quals_attrs parm_declarator_starttypename %prec UNARY @@ -1678,9 +1640,6 @@ parm_declarator_nostarttypename: notype_declarator: notype_declarator '(' parmlist_or_identifiers %prec '.' { $$ = build_nt (CALL_EXPR, $1, $3, NULL_TREE); } -/* | notype_declarator '(' error ')' %prec '.' - { $$ = build_nt (CALL_EXPR, $1, NULL_TREE, NULL_TREE); - poplevel (0, 0, 0); } */ | '(' maybe_attribute notype_declarator ')' { $$ = $2 ? tree_cons ($2, $3, NULL_TREE) : $3; } | '*' maybe_type_quals_attrs notype_declarator %prec UNARY @@ -2037,14 +1996,14 @@ lineno_stmt_decl_or_labels: errstmt: error ';' ; -pushlevel: /* empty */ - { pushlevel (0); +push_scope: /* empty */ + { push_scope (); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); } ; -poplevel: /* empty */ +pop_scope: /* empty */ { @@ifobjc if (c_dialect_objc ()) @@ -2059,7 +2018,7 @@ c99_block_start: /* empty */ { if (flag_isoc99) { $$ = c_begin_compound_stmt (); - pushlevel (0); + push_scope (); clear_last_expr (); add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0); } @@ -2075,7 +2034,7 @@ c99_block_end: /* empty */ { if (flag_isoc99) { tree scope_stmt = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0); - $$ = poplevel (KEEP_MAYBE, 0, 0); + $$ = pop_scope (); SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmt)) = SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmt)) = $$; @@ -2124,8 +2083,8 @@ compstmt_start: '{' { compstmt_count++; compstmt_nostart: '}' { $$ = convert (void_type_node, integer_zero_node); } - | pushlevel maybe_label_decls compstmt_contents_nonempty '}' poplevel - { $$ = poplevel (KEEP_MAYBE, 0, 0); + | push_scope maybe_label_decls compstmt_contents_nonempty '}' pop_scope + { $$ = pop_scope (); SCOPE_STMT_BLOCK (TREE_PURPOSE ($5)) = SCOPE_STMT_BLOCK (TREE_VALUE ($5)) = $$; } @@ -2589,11 +2548,11 @@ start_string_translation: "void bar (int (__attribute__((__mode__(SI))) int foo));". */ parmlist: maybe_attribute - { pushlevel (0); + { push_scope (); declare_parm_level (); } parmlist_1 { $$ = $3; - poplevel (0, 0, 0); } + pop_scope (); } ; parmlist_1: @@ -2606,32 +2565,23 @@ parmlist_1: parmlist_1 { $$ = $6; } | error ')' - { $$ = tree_cons (NULL_TREE, NULL_TREE, NULL_TREE); } + { $$ = make_node (TREE_LIST); } ; /* This is what appears inside the parens in a function declarator. Is value is represented in the format that grokdeclarator expects. */ parmlist_2: /* empty */ - { $$ = get_parm_info (0); } + { $$ = make_node (TREE_LIST); } | ELLIPSIS - { $$ = get_parm_info (0); - /* Gcc used to allow this as an extension. However, it does - not work for all targets, and thus has been disabled. - Also, since func (...) and func () are indistinguishable, - it caused problems with the code in expand_builtin which - tries to verify that BUILT_IN_NEXT_ARG is being used - correctly. */ + { $$ = make_node (TREE_LIST); + /* Suppress -Wold-style-definition for this case. */ + TREE_CHAIN ($$) = error_mark_node; error ("ISO C requires a named argument before `...'"); - parsing_iso_function_signature = true; } | parms - { $$ = get_parm_info (1); - parsing_iso_function_signature = true; - } + { $$ = get_parm_info (/*ellipsis=*/false); } | parms ',' ELLIPSIS - { $$ = get_parm_info (0); - parsing_iso_function_signature = true; - } + { $$ = get_parm_info (/*ellipsis=*/true); } ; parms: @@ -2706,11 +2656,11 @@ setspecs_fp: Its value is a list of ..._TYPE nodes or a list of identifiers. */ parmlist_or_identifiers: maybe_attribute - { pushlevel (0); + { push_scope (); declare_parm_level (); } parmlist_or_identifiers_1 { $$ = $3; - poplevel (0, 0, 0); } + pop_scope (); } ; parmlist_or_identifiers_1: @@ -3128,13 +3078,13 @@ optparmlist: } | ',' { - pushlevel (0); + push_scope (); } parmlist_2 { /* returns a tree list node generated by get_parm_info */ $$ = $3; - poplevel (0, 0, 0); + pop_scope (); } ; @@ -3799,22 +3749,14 @@ yyprint (FILE *file, int yychar, YYSTYPE yyl) } } -/* This is not the ideal place to put these, but we have to get them out - of c-lex.c because cp/lex.c has its own versions. */ +/* This is not the ideal place to put this, but we have to get it out + of c-lex.c because cp/lex.c has its own version. */ /* Parse the file. */ void c_parse_file (void) { yyparse (); - /* In case there were missing closebraces, get us back to the global - binding level. */ - while (! global_bindings_p ()) - poplevel (0, 0, 0); - /* __FUNCTION__ is defined at file scope (""). This - call may not be necessary as my tests indicate it - still works without it. */ - finish_fname_decls (); if (malloced_yyss) { |

