Commit 6cce57b0 by Jason Merrill Committed by Jason Merrill

c-common.c (finish_fname_decls): Put the DECL_STMTs inside the outermost scope.

        * c-common.c (finish_fname_decls): Put the DECL_STMTs inside the
        outermost scope.
        * c-decl.c (c_make_fname_decl): Push the decls there, too.
cp/
        * decl.c (cp_make_fname_decl): Push the decls inside the
        outermost scope.

From-SVN: r60848
parent 9c91c80b
2003-01-02 Jason Merrill <jason@redhat.com>
* c-common.c (finish_fname_decls): Put the DECL_STMTs inside the
outermost scope.
* c-decl.c (c_make_fname_decl): Push the decls there, too.
2003-01-03 Kazu Hirata <kazu@cs.umass.edu> 2003-01-03 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300-protos.h: Add a prototype for * config/h8300/h8300-protos.h: Add a prototype for
......
...@@ -1050,13 +1050,18 @@ finish_fname_decls () ...@@ -1050,13 +1050,18 @@ finish_fname_decls ()
if (body) if (body)
{ {
/* They were called into existence, so add to statement tree. */ /* They were called into existence, so add to statement tree. Add
body = chainon (body, the DECL_STMTs inside the outermost scope. */
TREE_CHAIN (DECL_SAVED_TREE (current_function_decl))); tree *p = &DECL_SAVED_TREE (current_function_decl);
body = build_stmt (COMPOUND_STMT, body); /* Skip the dummy EXPR_STMT and any EH_SPEC_BLOCK. */
while (TREE_CODE (*p) != COMPOUND_STMT)
COMPOUND_STMT_NO_SCOPE (body) = 1; p = &TREE_CHAIN (*p);
TREE_CHAIN (DECL_SAVED_TREE (current_function_decl)) = body; p = &COMPOUND_BODY (*p);
if (TREE_CODE (*p) == SCOPE_STMT)
p = &TREE_CHAIN (*p);
body = chainon (body, *p);
*p = body;
} }
for (ix = 0; fname_vars[ix].decl; ix++) for (ix = 0; fname_vars[ix].decl; ix++)
...@@ -1079,7 +1084,7 @@ finish_fname_decls () ...@@ -1079,7 +1084,7 @@ finish_fname_decls ()
saved_function_name_decls = stack; saved_function_name_decls = stack;
} }
/* Return the text name of the current function, suitable prettified /* Return the text name of the current function, suitably prettified
by PRETTY_P. */ by PRETTY_P. */
const char * const char *
...@@ -1163,7 +1168,7 @@ fname_decl (rid, id) ...@@ -1163,7 +1168,7 @@ fname_decl (rid, id)
} }
if (!ix && !current_function_decl) if (!ix && !current_function_decl)
pedwarn_with_decl (decl, "`%s' is not defined outside of function scope"); pedwarn_with_decl (decl, "`%s' is not defined outside of function scope");
return decl; return decl;
} }
......
...@@ -2545,6 +2545,18 @@ c_make_fname_decl (id, type_dep) ...@@ -2545,6 +2545,18 @@ c_make_fname_decl (id, type_dep)
DECL_INITIAL (decl) = init; DECL_INITIAL (decl) = init;
TREE_USED (decl) = 1; TREE_USED (decl) = 1;
if (current_function_decl)
{
/* Add the decls to the outermost block. */
struct binding_level *b = current_binding_level;
struct binding_level *old = b;
while (b->level_chain->parm_flag == 0)
b = b->level_chain;
current_binding_level = b;
pushdecl (decl);
current_binding_level = old;
}
finish_decl (decl, init, NULL_TREE); finish_decl (decl, init, NULL_TREE);
......
2003-01-02 Jason Merrill <jason@redhat.com>
* decl.c (cp_make_fname_decl): Push the decls inside the
outermost scope.
2003-01-03 Nathan Sidwell <nathan@codesourcery.com> 2003-01-03 Nathan Sidwell <nathan@codesourcery.com>
PR c++/45, c++/3784 PR c++/45, c++/3784
......
...@@ -6656,7 +6656,7 @@ cp_make_fname_decl (id, type_dep) ...@@ -6656,7 +6656,7 @@ cp_make_fname_decl (id, type_dep)
tree init = cp_fname_init (name); tree init = cp_fname_init (name);
tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init)); tree decl = build_decl (VAR_DECL, id, TREE_TYPE (init));
/* As we don't push the decl here, we must set the context. */ /* As we're using pushdecl_with_scope, we must set the context. */
DECL_CONTEXT (decl) = current_function_decl; DECL_CONTEXT (decl) = current_function_decl;
DECL_PRETTY_FUNCTION_P (decl) = type_dep; DECL_PRETTY_FUNCTION_P (decl) = type_dep;
...@@ -6667,6 +6667,14 @@ cp_make_fname_decl (id, type_dep) ...@@ -6667,6 +6667,14 @@ cp_make_fname_decl (id, type_dep)
TREE_USED (decl) = 1; TREE_USED (decl) = 1;
if (current_function_decl)
{
struct cp_binding_level *b = current_binding_level;
while (b->level_chain->parm_flag == 0)
b = b->level_chain;
pushdecl_with_scope (decl, b);
}
cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING); cp_finish_decl (decl, init, NULL_TREE, LOOKUP_ONLYCONVERTING);
return decl; return decl;
......
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