summaryrefslogtreecommitdiffstats
path: root/gcc/c-parse.in
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c-parse.in')
-rw-r--r--gcc/c-parse.in104
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)
{
OpenPOWER on IntegriCloud