diff --git a/gcc/ChangeLog b/gcc/ChangeLog index abe8ba769b4..6e3517b5fdc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2001-02-16 Jason Merrill + + * tree.h (BLOCK_CHAIN): Use BLOCK_CHECK. + 2001-02-16 Gerald Pfeifer * .gdbinit: Rename to gdbinit.in. @@ -196,7 +200,7 @@ Tue Feb 13 23:19:27 CET 2001 Jan Hubicka Tue Feb 13 23:05:42 CET 2001 Jan Hubicka - * regclass.c (init_reg_sets_1): Silence warning. + * regclass.c (init_reg_sets_1): Silence warning. Tue Feb 13 22:03:07 CET 2001 Jan Hubicka diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 2a8d7a56335..d7149eb759f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2001-02-16 Jason Merrill + + * optimize.c (remap_block): If we're compiling a clone, pass the + new block to insert_block. + 2001-02-16 Mark Mitchell * semantics.c (finish_asm_stmt): Robustify. @@ -29,8 +34,8 @@ 2001-02-08 Aldy Hernandez - * cp/parse.y (component_constructor_declarator): allow optional - parenthesess around constructor class name. + * parse.y (component_constructor_declarator): allow optional + parentheses around constructor class name. 2001-02-14 Nathan Sidwell diff --git a/gcc/cp/optimize.c b/gcc/cp/optimize.c index c6d43b9991f..e18ece97e91 100644 --- a/gcc/cp/optimize.c +++ b/gcc/cp/optimize.c @@ -161,7 +161,6 @@ remap_block (scope_stmt, decls, id) tree old_block; tree new_block; tree old_var; - tree *first_block; tree fn; /* Make the new block. */ @@ -195,16 +194,24 @@ remap_block (scope_stmt, decls, id) } /* We put the BLOCK_VARS in reverse order; fix that now. */ BLOCK_VARS (new_block) = nreverse (BLOCK_VARS (new_block)); - /* Attach this new block after the DECL_INITIAL block for the - function into which this block is being inlined. In - rest_of_compilation we will straighten out the BLOCK tree. */ fn = VARRAY_TREE (id->fns, 0); - if (DECL_INITIAL (fn)) - first_block = &BLOCK_CHAIN (DECL_INITIAL (fn)); + if (fn == current_function_decl) + /* We're building a clone; DECL_INITIAL is still error_mark_node, and + current_binding_level is the parm binding level. */ + insert_block (new_block); else - first_block = &DECL_INITIAL (fn); - BLOCK_CHAIN (new_block) = *first_block; - *first_block = new_block; + { + /* Attach this new block after the DECL_INITIAL block for the + function into which this block is being inlined. In + rest_of_compilation we will straighten out the BLOCK tree. */ + tree *first_block; + if (DECL_INITIAL (fn)) + first_block = &BLOCK_CHAIN (DECL_INITIAL (fn)); + else + first_block = &DECL_INITIAL (fn); + BLOCK_CHAIN (new_block) = *first_block; + *first_block = new_block; + } /* Remember the remapped block. */ splay_tree_insert (id->decl_map, (splay_tree_key) old_block, diff --git a/gcc/tree.h b/gcc/tree.h index c7745be369b..60427b998b2 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -823,7 +823,7 @@ struct tree_exp #define BLOCK_SUPERCONTEXT(NODE) (BLOCK_CHECK (NODE)->block.supercontext) /* Note: when changing this, make sure to find the places that use chainon or nreverse. */ -#define BLOCK_CHAIN(NODE) TREE_CHAIN (NODE) +#define BLOCK_CHAIN(NODE) TREE_CHAIN (BLOCK_CHECK (NODE)) #define BLOCK_ABSTRACT_ORIGIN(NODE) (BLOCK_CHECK (NODE)->block.abstract_origin) #define BLOCK_ABSTRACT(NODE) (BLOCK_CHECK (NODE)->block.abstract_flag)